AES加密使用Php,javascript,反之亦然
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AES加密使用Php,javascript,反之亦然相关的知识,希望对你有一定的参考价值。
我正在使用php使用javascript和服务器端进行客户端加密。我们双方都使用相同的密钥和IV。
Php加密:
$string='test data';
$output = '';
$encrypt_method = 'AES-256-CBC';
$secret_key = 'secret key in hex';
$secret_iv = 'iv in hex';
$key = hash('sha256',$secret_key);
$output = openssl_encrypt($string,$encrypt_method,$key,0,$initialization_vector);
//Encrypted text in php
$output = base64_encode($output);
Javascript加密代码:
var key = 'secret key in hex';
key = CryptoJS.SHA256(key);
var ivHex = CryptoJS.enc.Hex.parse(' IV in hex ');
var options = { mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7, iv:ivHex};
var obj='test data';
var encrypted = CryptoJS.AES.encrypt(obj,key ,options);
var encryptedBase64 = encrypted.toString();
//Encrypted text in javascript
console.log(encryptedBase64);
两者都提供不同的输出。我做错了吗?
答案
$secret_iv
已定义,但在$initialization_vector
中使用了未定义的openssl_encrypt()
。- 对于第四个参数,您不想传递
0
,您想要传递OPENSSL_RAW_DATA
(常量)。 - 你在PHP中传递
hash('sha256', $secret_key)
但在Javascript中直接使用secret_key
。 注意:您的密钥派生(hash('sha256', $some_text_input)
)非常弱。请考虑使用PBKDF2-SHA256。
重要提示:没有HMAC的AES-CBC易受padding-oracle attacks攻击。你应该always use authenticated encryption。
安全加密的一个例子看起来像this。解密更多一些。
以上是关于AES加密使用Php,javascript,反之亦然的主要内容,如果未能解决你的问题,请参考以下文章
php中的AES加密,然后用Javascript(cryptojs)解密
golang GoLang使用AES加密将字符串加密到base64,反之亦然。
golang GoLang使用AES加密将字符串加密到base64,反之亦然。