使用 SJCL 在 Javascript 中加密,在 PHP 中解密
Encrypt in Javascript with SJCL and decrypt in 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);
虽然这并不能完全回答您的问题,但我必须:
- 建议使用crypto-js作为最标准的抱怨JS加密,哈希和KDF库(这意味着提供的方法与PHP等价物兼容)
- 建议您至少阅读本文的第一行在这里您将了解为什么使用Javascript加密的所有收益都是虚假的安全感
相关文章:
- 使用 SJCL 在 Javascript 中加密,在 PHP 中解密
- 用JavaScript加密字符串,用RSA技术用PHP解密
- 与PHP解密相匹配的Javascript加密
- 用PHP mcrypt加密的Javascript解密Blowfish CBC
- Node.js对外部PHP aes-256-cbc进行解密,然后对其进行加密
- javascript->php加密解密-需要澄清和方法请
- 在 PHP 中加密字符串,在 Node.js 中解密
- RSA加密:在PHP中创建密文,并在Javascript中解密
- PHP中的加密和node.js中的解密
- 如何使用PHP mcrypt加密和使用节点加密解密
- CryptoJS使用密码短语加密AES,但PHP解密需要密钥
- PHP加密和CryptoJS解密
- JavaScript中的三重DES加密和PHP中的解密
- 在php中解密河豚
- 可以't使用gnupg(Ubuntu GPG通过PHP)解密openpgpjs(JS)加密的pgp消息
- 在ajax请求中加密密码,并在laravel控制器(.php)中解密
- 用PHP加密消息,用JavaScript解密
- 是否可以用Php加密JWT令牌并用Javascript解密
- 使用CryptoJS加密和使用php解密:IV. js的用途是什么?
- SSL替代-用JavaScript加密密码,提交给PHP解密