javascript - 用 Salt、密码和类型在 PHP 中解密?

标签 javascript php encryption aes

当我运行 Crypto-JS 的加密函数时,我会得到以下 Base64 编码:

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

我以后如何在 PHP 中解密它?我尝试过使用 openSSL、mcrypt 等,但似乎都不起作用——我想我不知道如何处理 base64 编码、salting、VI 和所有内容......某处出了问题。

最佳答案

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

关于javascript - 用 Salt、密码和类型在 PHP 中解密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21130439/

相关文章:

javascript - 延迟加载图像和 SEO

javascript - 按属性对列表进行排序并在 JavaScript 中每个首字母更改之前添加一个对象

iphone - 我的应用程序是 "contain encryption"吗?

javascript - 使用 jQuery 多日期选择器日历跳转到当前月份

javascript - 按最新日期按对象数组排序不起作用

php - 如何将 Sql 代码转换为 codeigniter 语法?

php - 为什么我不能在选项标签内添加 php 代码?

php - 如何在 URL 中隐藏文件路径?

c++ - C++ 中的 RSA 加密

java - AES 加密,解密文件中出现额外的垃圾字符