在 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 中解密 的相关文章

  • Android GCM 服务器的 API 密钥

    我有点困惑我应该为 GCM 服务器使用哪个 API 密钥 在文档中它说使用 android api 密钥 这对我不起作用并且总是给出未经授权的 http developer android com google gcm gs html ht
  • 为什么 length 是 `Array` 的属性而不是 `Array.prototype` 链

    所以我在 V8 控制台上玩了很多 我做到了 Object getOwnPropertyNames 我期望得到 结果 然而 length 所以这意味着不是成为原型链的一部分 length是所有人的成员财产Array对象 这是一个错误 还是有任
  • 如何以编程方式退出或关闭 Javascript UWP 应用程序? (Windows 10)

    我制作了一个游戏 它需要自己的退出按钮 我无法使用CoreApplication Exit https msdn microsoft com en us library windows apps windows applicationmod
  • 将文本大小调整为矩形 在 Canvas HTML5 中调整大小

    我是 Canvas 新手 我正在创建一个网站 以在调整矩形大小时增加文本 我尝试了很多 但没有任何效果 实际上 我希望如果我仅按其宽度调整矩形大小 向左拉伸 向右拉伸 则仅应增加文本宽度而不是字体大小 我已经完成了字体大小 但发现增加孤立文
  • 使用 JavaScript 生成 PDF 文件

    我正在尝试将 XML 数据从网页转换为 PDF 文件 并且希望能够完全在 JavaScript 中完成此操作 我需要能够绘制文本 图像和简单的形状 我希望能够完全在浏览器中完成此操作 我刚刚写了一个名为jsPDF https github
  • 如何在没有引用的情况下复制对象?

    PHP5 OOP 有据可查对象通过引用传递 http php net manual en language oop5 references php默认情况下 如果这是默认的 在我看来 有一种非默认的方式可以在没有参考的情况下进行复制 如何
  • 为什么 Web Worker 性能在 30 秒后急剧下降?

    我正在尝试提高在网络工作人员中执行时脚本的性能 它旨在解析浏览器中的大型文本文件而不会崩溃 一切都运行得很好 但我注意到使用网络工作者时大文件的性能存在严重差异 于是我做了一个简单的实验 我在同一输入上运行脚本两次 第一次运行在页面的主线程
  • 在管道中重用变量的功能方式

    在 javascript 和 typescript 中与 Ramda 一起使用函数式编程 我经常发现自己编写如下代码 const myFun c gt const myId c id const value pipe getAnotherO
  • 将数组拆分为特定数量的块

    我知道array chunk 允许将数组拆分为多个块 但块的数量根据元素的数量而变化 我需要的是始终将数组拆分为特定数量的数组 例如 4 个数组 以下代码将数组分为 3 个块 两个块各有 2 个元素 1 个块有 1 个元素 我想要的是将数组
  • 如何使用 vanilla JS 实现可维护的反应式 UI

    今天我遇到了一个问题 可以通过使用像 Vue 这样的反应式和状态管理框架来轻松解决 遗憾的是 无法使用它 以下 简化 情况 链接到代码笔 https codepen io theiaz pen BazErKV 我们有一个服务器渲染的页面 其
  • 获取点击的的DOM路径

    HTML div class lol a class rightArrow href a div 伪代码 rightArrow click function rightArrowParents this dom dom is the pse
  • 如何打开弹出窗口并用父窗口中的数据填充它?

    如何使用 JavaScript jQuery 使用父页面中 JS 变量的数据填充弹出窗口 在我的示例中 我有一个文件名数组 我在父窗口中最多列出五个 如果还有更多 我想提供一个链接来打开弹出窗口并列出数组中的每个帖子 因此 如果我打开一个包
  • 计算文本选择的 xy 位置

    我正在尝试使用 DOM 元素创建自己的文本选择 是的 我的意思是当您在此元素中选择文本时 您会在文本后面看到蓝色背景 这个想法是停止默认行为 蓝色 并使用我自己的元素来完成工作 方法是找到选择的 xy 位置 然后放置绝对定位的元素 我希望能
  • 如何处理requireJs超时错误?

    我正在使用 require js 作为加载框架编写一个移动混合应用程序 我遇到加载错误的问题 我想做的是在设备离线且无法下载在屏幕上显示地图所需的 google 地图 API 脚本时设置后备解决方案 我得到的只是 Uncaught Erro
  • 从 DirectionsRenderer 中获取折线或标记的事件

    我正在使用 DirectionsService 和路线方法来生成 DirectionsResult 我还使用 DirectionsRenderer 对象来显示结果 因为它非常易于使用 我在检测 Directions changed 事件时没
  • 使用 AngularJS 多部分表单数据将文件上传到 Google Cloud Storage

    我正在尝试使用 AngularJS 中指定的多部分方法将图像文件上传到 Google Cloud Storagehttps cloud google com storage docs json api v1 how tos upload m
  • 如何在 codeigniter 查询中使用 FIND_IN_SET?

    array array classesID gt 6 this gt db gt select gt from this gt table name gt where array gt order by this gt order by q
  • PHP cURL 在本地工作,在 AWS 服务器上出现错误 77

    最新更新 脚本作为管理员用户通过 SSH shell 作为 php script php 成功运行 当由 nginx 用户运行时 curl 命令无法执行 https 请求 所以我猜测这是nginx用户无法正确使用curl的问题 我已经检查了
  • 如何使用 jQuery 或 JavaScript 聚焦 或 标签?

    for var i 0 i
  • 使用 JQuery 根据下拉列表选择的值显示/隐藏控件

    我正在尝试使用 JQuery 根据下拉菜单的选定索引显示 隐藏 div 标签 但它不起作用 任何帮助将不胜感激 Thanks

随机推荐

  • 显示: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