【发布时间】:2014-12-24 18:27:05
【问题描述】:
在 PHP 中使用 mcrypt 加密
<?php
$string = 'Secret Message';
$key = 'd4b494e4502a62edd695a903a94c2701';
$iv = '02f30dffbb0d084755f438f7d8be4a7d';
$encrypted = base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_256,
$key,
$string,
MCRYPT_MODE_CBC,
$iv
)
);
//$encrypted results in 'nYoFAiyDARVSI09lH/IPdim5TvE51izVjk6sc2AK9Rg='
?>
使用 CryptoJS 在 Javascript 中解密
<script>
var encrypted = 'nYoFAiyDARVSI09lH/IPdim5TvE51izVjk6sc2AK9Rg=';
var key = CryptoJS.enc.Hex.parse('d4b494e4502a62edd695a903a94c2701');
var iv = CryptoJS.enc.Hex.parse('02f30dffbb0d084755f438f7d8be4a7d');
var decrypted = CryptoJS.AES.decrypt(encrypted,key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7});
console.log(decrypted.toString(CryptoJS.enc.Utf8)); //prints an empty string
</script>
我不知道如何让 Javascript 端吐出原文。
【问题讨论】:
-
MCRYPT_RIJNDAEL_256 不是 AES; MCRYPT_RIJNDAEL_128 是。
-
谢谢,但是有没有办法在 javascript 中用 256 位块解密 RIJNDAEL 密码?
-
当然,找到一个 Rijndael javascript 实现。
-
谢谢。另外,当我将 php 中的块大小更改为 MCRYPT_RIJNDAEL_256 时,它仍然不起作用...
-
您的意思是上一条评论中的 MCRYPT_RIJNDAEL_128 吗?无论如何,mcrypt_encrypt 使用的填充与其他所有内容都不兼容,尤其是 Javascript 使用的 PKCS7 填充。请参阅 owlstead 的 answer in this question 了解更多信息。
标签: javascript encryption aes mcrypt cryptojs