php ic9解密_使用SJCL用Javascript加密并用PHP解密

我想用Javascript加密一些数据,并在将其发送到php服务器后将其解密.

我打算使用JS加密库作为SJCL:http://crypto.stanford.edu/sjcl/.到目前为止,我可以使用JS加密我的数据并通过ajax发布.

我的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);

标签:cryptography,sjcl,javascript,php

来源: https://codeday.me/bug/20191127/2076834.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值