首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用SJCL加密Javascript,用PHP解密

用SJCL加密Javascript,用PHP解密
EN

Stack Overflow用户
提问于 2012-08-16 06:51:56
回答 2查看 3.6K关注 0票数 4

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

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

代码语言:javascript
复制
sjcl.encrypt('a_key','secured_message');

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

谢谢

EN

回答 2

Stack Overflow用户

发布于 2016-12-25 19:27:05

PHP7.1.0最后添加了对iv和aad参数的openssl支持,但它不正确地强制执行12字节iv长度。

在您的示例中,我们加密如下:

代码语言:javascript
复制
var sjcl = require('./sjcl');
console.log(sjcl.encrypt('a_key', 'secured_message', { mode: 'ccm', iv: sjcl.random.randomWords(3, 0) }));

得到:

代码语言:javascript
复制
{"iv":"YAKkgmNCcVawQtiB","v":1,"iter":10000,"ks":128,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"CwEDE4PXBzY=","ct":"pJ7nmnAGXiC9AD29OADlpFdFl0d/MxQ="}

因此,鉴于:

代码语言:javascript
复制
$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);

我们可以在PHP7.1.0中解密如下:

代码语言:javascript
复制
$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);
票数 3
EN

Stack Overflow用户

发布于 2014-06-20 09:04:39

虽然这并不能完全回答你的问题,但我必须:

  1. 建议使用密码js作为最标准的投诉JS加密、散列和KDF库(这意味着提供的方法与PHP等效程序兼容)
  2. 建议您至少阅读这篇文章的第一行,在其中您将了解为什么所有使用Javascript加密技术都是错误的安全感。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11982073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档