在 PHP openssl 中加密并在 javascript CryptoJS 中解密

2024-03-14

我正在使用 PHP 加密一些参数

 openssl("parameter", "AES-256-ECB", "client")

我想解密CryptoJS:

CryptoJS.AES.decrypt(parameter, "client", {mode: CryptoJS.mode.ECB}).toString(CryptoJS.enc.Utf8);

但它抛出一个空字符串。

有什么建议么?


CryptoJS:PHP openssl 加密 -> javascript 解密

PHP:

function CryptoJSAesEncrypt($passphrase, $plain_text){

    $salt = openssl_random_pseudo_bytes(256);
    $iv = openssl_random_pseudo_bytes(16);
    //on PHP7 can use random_bytes() istead openssl_random_pseudo_bytes()
    //or PHP5x see : https://github.com/paragonie/random_compat

    $iterations = 999;  
    $key = hash_pbkdf2("sha512", $passphrase, $salt, $iterations, 64);

    $encrypted_data = openssl_encrypt($plain_text, 'aes-256-cbc', hex2bin($key), OPENSSL_RAW_DATA, $iv);

    $data = array("ciphertext" => base64_encode($encrypted_data), "iv" => bin2hex($iv), "salt" => bin2hex($salt));
    return json_encode($data);
}

$string_json_fromPHP = CryptoJSAesEncrypt("your passphrase", "your plain text");

JS:

function CryptoJSAesDecrypt(passphrase,encrypted_json_string){

    var obj_json = JSON.parse(encrypted_json_string);

    var encrypted = obj_json.ciphertext;
    var salt = CryptoJS.enc.Hex.parse(obj_json.salt);
    var iv = CryptoJS.enc.Hex.parse(obj_json.iv);   

    var key = CryptoJS.PBKDF2(passphrase, salt, { hasher: CryptoJS.algo.SHA512, keySize: 64/8, iterations: 999});

        
    var decrypted = CryptoJS.AES.decrypt(encrypted, key, { iv: iv});

    return decrypted.toString(CryptoJS.enc.Utf8);
}

console.log(CryptoJSAesDecrypt('your passphrase','<?php echo $string_json_fromPHP?>'));

CryptoJS:javascript 加密 -> PHP openssl 解密

JS:

function CryptoJSAesEncrypt(passphrase, plain_text){

    var salt = CryptoJS.lib.WordArray.random(256);
    var iv = CryptoJS.lib.WordArray.random(16);
    //for more random entropy can use : https://github.com/wwwtyro/cryptico/blob/master/random.js instead CryptoJS random() or another js PRNG

    var key = CryptoJS.PBKDF2(passphrase, salt, { hasher: CryptoJS.algo.SHA512, keySize: 64/8, iterations: 999 });

    var encrypted = CryptoJS.AES.encrypt(plain_text, key, {iv: iv});

    var data = {
        ciphertext : CryptoJS.enc.Base64.stringify(encrypted.ciphertext),
        salt : CryptoJS.enc.Hex.stringify(salt),
        iv : CryptoJS.enc.Hex.stringify(iv)    
    }
    
    return JSON.stringify(data);
}

PHP:

function CryptoJSAesDecrypt($passphrase, $jsonString){

    $jsondata = json_decode($jsonString, true);
    try {
        $salt = hex2bin($jsondata["salt"]);
        $iv  = hex2bin($jsondata["iv"]);          
    } catch(Exception $e) { return null; }

    $ciphertext = base64_decode($jsondata["ciphertext"]);
    $iterations = 999; //same as js encrypting 

    $key = hash_pbkdf2("sha512", $passphrase, $salt, $iterations, 64);

    $decrypted= openssl_decrypt($ciphertext , 'aes-256-cbc', hex2bin($key), OPENSSL_RAW_DATA, $iv);

    return $decrypted;

}

在 mi 测试中我使用过: github.com/sytelus/CryptoJS https://github.com/sytelus/CryptoJS

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PHP openssl 中加密并在 javascript CryptoJS 中解密 的相关文章

随机推荐

  • 显示:Chrome 中出现了磨合?

    我尝试过使用display run in为了创建一个语义化且美观的元数据名称 值列表 喜欢这样 dl dt Subject dt dd A Question dd dt From dt dd Mr Smith dd dt dt dl
  • 防止 unlist 删除 NULL 值

    我有一个列表向量 我使用unlist在他们 向量中的一些元素是NULL and unlist似乎正在放弃它们 我怎样才能防止这种情况发生 这是一个简单 非 工作示例 展示了这一点不需要的功能 of unlist a c list p1 2
  • iPhone safari 上的奇怪点击事件气泡在冒泡到 document.body 之前停止

    我已将点击事件绑定为 document body onclick function alert aaa 无论我点击什么元素 它在 Android 上或 IOS 上的 Chrome 上都表现良好 但在 iPhone safari 上单击除 a
  • 检测变化的多对多关系

    我试图理解为什么 DbContext 没有检测到多对多关系的变化 这是我在模型配置中设置的 this Configuration ValidateOnSaveEnabled false this Configuration ProxyCre
  • 如何将 PIL 与 PyPy 一起使用?

    我进行了一些搜索 但找不到将 PIL 与 PyPy 一起使用的教程 根据 PyPy 的博客 支持 PIL 我在 PYTHONPATH 中使用 pip 安装了 PIL 下载后 pip make 2个 pyd文件 imaging pyd和 im
  • 将我自己的 SQLite DB 从 Asset 文件夹复制到

    我不明白为什么我无法将数据库文件 abic 复制到应用程序目录 data data context getPackageName databases 这是我的 DataBaseHelper 类 import java io File imp
  • 如何查明转换是否已在节点上运行?

    我怎样才能知道节点上是否已经有一个转换正在运行 例如FadeTransition 您可以随时使用过渡 http docs oracle com javafx 2 api javafx animation Transition html 状态
  • 代码契约:如何处理继承的接口?

    我正在使用 MS Code Contracts 并且在使用接口继承和 ContractClassFor 属性时遇到了障碍 给定这些接口和合约类 ContractClass typeof IOneContract interface IOne
  • IPython 3.5 返回“错误的解释器:没有这样的文件或目录”

    我在尝试使用 IPython 时遇到随机错误 我现在突然无法使用 iPython3 没有任何解释 我不记得除了以太坊客户端之外安装过任何重要的东西 而且我没有下载哈希值或任何东西 突然我明白了 cchilders ipython3 bash
  • 停止模型上的双向数据绑定

    我对 Angular 还很陌生 所以如果这里有一些不正确的想法 请告诉我 我正在尝试基于同一数据集创建两个单独的范围变量 我假设我能够将它们设置为不同的变量 如下所示 并且它会起作用 然而 我发现 无论它们的名称是什么或如何定义 即使是在指
  • 在 Python 中使用 XML 模式进行验证

    我有一个 XML 文件和另一个文件中的 XML 架构 我想验证我的 XML 文件是否遵循该架构 我如何在 Python 中做到这一点 我更喜欢使用标准库 但如果需要 我可以安装第三方包 我假设您的意思是使用 XSD 文件 令人惊讶的是 支持
  • 如何查看docker镜像的日志?

    在docker世界中 我们可以很容易地看到docker容器 即正在运行的镜像 的日志 但在图像创建过程中 通常会发出多个命令 例如 节点项目中的 npm install 命令 查看这些命令的日志也会很有帮助 我快速地从文档中搜索 但没有找到
  • 使用 PhantomJS 嵌入网页的所有图像会产生警告,但可以工作

    我试图通过嵌入所有图像 以及通过这一点后的其他外部资源 将网页转换为单个文件 以下是我运行 PhantomJs 的方式 phantomjs web security false embed images js http localhost
  • 构建代理离线

    我正在使用 TFS 2015 我看到我的构建代理处于离线状态 我启动 VsoWorker exe 来查看日志并了解错误 这是我得到的信息 但我从互联网上找不到任何内容 请问有什么想法吗 16 07 57 649004 Sending tra
  • 使用嵌套 ScrollViewer 忽略水平鼠标滚动

    我在网格周围有一个 ScrollViewer 来垂直滚动其内容
  • 键盘自动校正高度(带/不带自动校正)

    我得到的键盘高度是这样的 void keyboardNotification NSNotification notification NSDictionary keyboardInfo notification userInfo NSVal
  • 使用 CMake 进行 Boost 测试 - 未定义的 main

    我在使用 MacPorts 安装的 Boost 在 Mac 上构建一个使用 Boost Test 的小程序时遇到问题 opt local lib 这是我的最小源文件 test cpp define BOOST TEST MODULE MyT
  • 如何更改 Qthread 内 Qtimer 的时间间隔?

    我希望能够更改 QThread 内 QTimer 的间隔时间 这是我的代码 import sys from PyQt5 import QtWidgets from PyQt5 QtWidgets import QApplication QM
  • 计算 pow(a,b) mod n

    I want to calculate ab mod n for use in RSA decryption My code below returns incorrect answers What is wrong with it uns
  • 在 PHP openssl 中加密并在 javascript CryptoJS 中解密

    我正在使用 PHP 加密一些参数 openssl parameter AES 256 ECB client 我想解密CryptoJS CryptoJS AES decrypt parameter client mode CryptoJS m