gpt4 book ai didi

php - 使用 SJCL 在 Javascript 中加密并在 PHP 中解密

转载 作者:可可西里 更新时间:2023-10-31 23:08:09 29 4
gpt4 key购买 nike

我想用 Javascript 加密一些数据,在将它发送到 php 服务器后,它可以被解密。

我计划使用 JS 加密库作为 SJCL:http://crypto.stanford.edu/sjcl/ .到目前为止,我可以在 JS 中加密我的数据并通过 ajax post 发送它。我的 JS 代码像这样。

sjcl.encrypt('a_key','secured_message');

我的问题是如何在 php 中解密我的数据。如果可能的话,请告诉我如何使用示例代码进行操作。 (注意:SSL 对我来说不是一个选项,现在我计划使用 KEY 作为每个请求生成的随机数)

谢谢

最佳答案

PHP 7.1.0 最终添加了对 iv 和 aad 参数的 openssl 支持但是它错误地强制执行了 12 字节的 iv 长度。

在你的例子中,我们加密如下:

var sjcl = require('./sjcl');
console.log(sjcl.encrypt('a_key', 'secured_message', { mode: 'ccm', iv: sjcl.random.randomWords(3, 0) }));

得到:

{"iv":"YAKkgmNCcVawQtiB","v":1,"iter":10000,"ks":128,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"CwEDE4PXBzY=","ct":"pJ7nmnAGXiC9AD29OADlpFdFl0d/MxQ="}

所以,给定:

$password = 'a_key';
$input = json_decode('{"iv":"YAKkgmNCcVawQtiB","v":1,"iter":10000,"ks":128,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"CwEDE4PXBzY=","ct":"pJ7nmnAGXiC9AD29OADlpFdFl0d/MxQ="}', true);

我们可以在PHP 7.1.0中解密如下:

$digest   = hash_pbkdf2('sha256', $password, base64_decode($input['salt']), $input['iter'], 0, true);
$cipher = $input['cipher'] . '-' . $input['ks'] . '-' . $input['mode'];
$ct = substr(base64_decode($input['ct']), 0, - $input['ts'] / 8);
$tag = substr(base64_decode($input['ct']), - $input['ts'] / 8);
$iv = base64_decode($input['iv']);
$adata = $input['adata'];

$dt = openssl_decrypt($ct, $cipher, $digest, OPENSSL_RAW_DATA, $iv, $tag, $adata);
var_dump($dt);

关于php - 使用 SJCL 在 Javascript 中加密并在 PHP 中解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11982073/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com