Posted in Javascript onApril 19, 2017
本文实例讲述了JS实现AES加密并与PHP互通的方法。分享给大家供大家参考,具体如下:
有关数据加密解密问题,有很多钟加密方式;
这里我讲述下js和php实现AES互通
js加密:
首先引入这几个js文件
本站下载地址。
<script type="text/JavaScript" src="/CryptoJS/aes.js"></script> <script type="text/javascript" src="/CryptoJS/pad-zeropadding.js"></script> <script type="text/javascript"> var data="test";//加密字符串 var key = CryptoJS.enc.Latin1.parse('@12345678912345!');//密钥 var iv = CryptoJS.enc.Latin1.parse('@12345678912345!');//与密钥保持一致 //加密 var data = JSON.stringify(data);//将数据对象转换为json字符串 var encrypted = CryptoJS.AES.encrypt(data,key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding}); encrypted=encodeURIComponent(encrypted); document.write(decrypted);//输出加密后的字符串 //解密 var data="加密的字符串"; //key和iv和加密的时候一致 var decrypted = CryptoJS.AES.decrypt(data,key,{iv:iv,padding:CryptoJS.pad.ZeroPadding}); decrypted=decrypted.toString(CryptoJS.enc.Utf8); document.write(decrypted);//输出解密后的数据 </script>
注意:在实际用的时候和php传输中,js加密后的字符串里面的+被浏览器解析成了空格 然后php解密的时候出错;这里可以对加密之后的字符串做进一步处理encrypted=encodeURIComponent(encrypted);就没有这个问题了
PHP的加密解密方法:
$privateKey="@12345678912345!"; $iv="@12345678912345!"; //加密 $encrypted=mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$privateKey,$data,MCRYPT_MODE_CBC,$iv); echo base64_encode($encrypted); //解密 $encryptedData=base64_decode($data); $decrypted=mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$privateKey,$encryptedData,MCRYPT_MODE_CBC,$iv); $decrypted=rtrim($decrypted,"\0");//注意!解密出来的数据后面会出现六个红点;这句代码可以处理掉,从而不影响进一步的数据操作 return $decrypted;
JS实现AES加密并与PHP互通的方法分析
- Author -
momo_mutou声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@