使用Salt,密码和类型在PHP中解密? [英] Decrypt in PHP with Salt, password, and type?

查看:205
本文介绍了使用Salt,密码和类型在PHP中解密?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我运行Crypto-JS的加密函数时,我得到了base64编码的以下内容:

When I run Crypto-JS's encrypt function, I am given the base64-encoded following:

var crypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase",  {mode: CryptoJS.mode.CBC}).toString();
==>  "U2FsdGVkX19HKyOimD43Bl4ww/I40M+NQrscjti3ZnA="

我将来如何在PHP中解密这个问题?我曾尝试使用openSSL,mcrypt等,似乎没什么用 - 我想我不知道如何处理base64编码,salting,VI等等......某些地方出了问题。

How do I unencrypt this in PHP in the future? I have attempted using openSSL, mcrypt, etc, and nothin seems to work -- I guess I don't know how to deal with base64 encoding, salting, VI, and everything... Something goes wrong somewhere.

推荐答案

JS

    // encrypt data with CryptoJS

    var crypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase");

    // get additional info from CryptoJS ecnrypted data

    var data_base64 = crypted.ciphertext.toString(CryptoJS.enc.Base64);
    var iv_base64   = crypted.iv.toString(CryptoJS.enc.Base64);
    var key_base64  = crypted.key.toString(CryptoJS.enc.Base64);

PHP

    $encrypted = base64_decode("data_base64"); // data_base64 from JS
    $iv        = base64_decode("iv_base64");   // iv_base64 from JS
    $key       = base64_decode("key_base64");  // key_base64 from JS

    /* MCRYPT */
    $plaintext = mcrypt_decrypt( MCRYPT_RIJNDAEL_128, $key, $encrypted, MCRYPT_MODE_CBC, $iv );

    // remove padding added by crypt algorithms
    $plaintext = rtrim($plaintext, "\t\0 "); // remove tab-, zero- and space-padding

    /***************************************/
    /* OPENSSL */
    $plaintext = openssl_decrypt($encrypted, 'AES-256-CBC', $key, 0, $iv);
    // or
    $plaintext = openssl_decrypt("data_base64", 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv); // works with base64 encoded data from JS

这篇关于使用Salt,密码和类型在PHP中解密?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆