AES - Crypto JS & PHP
AES - Crypto JS & PHP
我在加密js中加密的解密数据时遇到问题。有时它有效有时无效,如果有效,则返回"消息",但如果有效,则返回垃圾。
var salt = CryptoJS.lib.WordArray.random(128/8);
var key256Bits500Iterations = CryptoJS.PBKDF2("password", salt, { keySize: 256/32, iterations: 5 });
var iv = CryptoJS.enc.Hex.parse('1011121c1d1e1f');
var encrypted = CryptoJS.AES.encrypt("Message", key256Bits500Iterations, { iv: iv });
var data_base64 = encrypted.ciphertext.toString(CryptoJS.enc.Base64);
var iv_base64 = encrypted.iv.toString(CryptoJS.enc.Base64);
var key_base64 = encrypted.key.toString(CryptoJS.enc.Base64);
.PHP
$encrypted = base64_decode($_POST['data']); /
$iv = base64_decode($_POST['iv']);
$key = base64_decode($_POST['key']);
$plaintext = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, rtrim($key, "'t'0'r'n "), rtrim($encrypted, "'t'0'r'n "), MCRYPT_MODE_CBC, $iv ), "'t'0'r'n ");
我想留在cryptoJS上。
最后我
以:http://wiki.birth-online.de/snippets/php/aes-rijndaelhttp://wiki.birth-online.de/snippets/javascript/aes-rijndael
但它仍然需要一些调整,所以:
$crypted = rtrim($_POST['msg'],''t'0'r'n ');
$crypted = str_replace(" ","+",$crypted);
$password = 'itsmysecret';
$blocksize = 256;
$decrypted = AES::decrypt($crypted, $password, $blocksize);
现在它起作用了。
你不应该rtrim
密钥。键可能包含任何字节值,包括您刚刚修剪掉的字节值。旧版本很乐意用 0 个值字节填充密钥,因此这意味着密钥可能与 CryptoJS 源中使用的密钥不同。
发送带有密文的密钥没有意义。相反,最好在PHP中使用PBKDF2,并从密码中计算密钥。
最后,请注意,PHP mcrypt 默认为零填充,使用 PKCS#7 取消填充。帮助页面上的 mcrypt 注释包含一个很好的 PKCS#7 实现来执行取消填充。
相关文章:
- php&js-将电子邮件添加到输入文本中
- PHP&CSS:如何获得表中每一行的悬停效果
- 无法使用AJAX&PHP
- 如何安全地获取&使用Facebook应用程序访问令牌发送通知使用PHP&Javascript
- 如何将Angular 2用于各种网站&使用PHP作为后端的模块
- 如果没有添加PHP&Javascript
- 将本地MySQL数据库与PHP&谷歌地图上的JavaScript
- IE不发送发布数据PHP&jQuery
- css&js文件在php中不起作用
- PHP&jQuery联系人表单错误
- 如何不允许在使用PHP的自动完成表单中不在数据库中的值&JS
- Jquery、AJAX&PHP,表单提交不起作用
- 启动&使用php停止iframe
- (PHP&JavaScript)a href添加按钮赢得'我不适用于Mozilla,但适用于IE和谷歌
- 动态路由PHP&AngularJS
- 是php json_encode&AJAX破坏了我的数组
- php&ajax检索post数据失败
- 无限滚动(mysql,php&js)循环问题
- 如何将DIV ID的值保存到数据库PHP&MySQL
- & php post receive problem