注:PHP5.6及以上版本已不再支持mcrypt_decrypt解密和mcrypt_encrypt加密;
因开发需求,需要通过前端js加密传输数据,通过各种度娘搜索最后采用了AES方式,但是发现有的是有代码没文件,有的是测试解密出现乱码,现在将自己最后采用的方式总结一下。
首先就是关于所引用的AES加密解密包的js文件,最后自己使用的文件地址为:http://download.csdn.net/detail/zhang517614202/9033319
个人测试文件包地址:http://download.csdn.net/detail/phplittleboy/9783261
加密解密过程中的向量和秘钥必须保持一致,而且必须为16位(亲测必须为16位)
代码示例:
JS加密代码:
<!DOCTYPE html>
<html>
<head>
<title>加密测试</title>
<script src="./rollups/aes.js"></script>
<script src="./rollups/md5.js"></script>
<script src="./components/pad-zeropadding.js"></script>
<script src="./jquery.min.js"></script>
<meta charset="utf-8" />
</head>
<body>
加密结果:<p style="color:red;" id='end'></p>
<script>
var key = CryptoJS.enc.Latin1.parse('1234567890654321'); //秘钥 16位
var iv = CryptoJS.enc.Latin1.parse('1234567890123456'); //向量 16位
var data = "AES加密测试"; //要加密的数据
var encrypted = CryptoJS.AES.encrypt(data, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding });
$("#end").text(encrypted);
//加密结果为:NRhLlhis3QLXcpzGv8S1NA==
</script>
</body>
</html>
PHP解密代码:
<?php
$key = "1234567890654321"; //秘钥 16位
$iv = "1234567890123456"; //向量 16位
$data = "NRhLlhis3QLXcpzGv8S1NA==";
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, base64_decode($data), MCRYPT_MODE_CBC, $iv);
echo "解密结果:<p style='color:blue;'>".$decrypted."</p>";
?>