今天做了一个功能,需要js传密码到php文件,对js密码 进行判断,为想为这个传输过程进行解密,参考了网上的一个方法(这个方法我只是使用了,并没有太深了解0.0)
首先要引入3个js文件 (在网上可搜索到)
<script src="../public/js/aes.js"></script><script src="../public/js/md5.js"></script><script src="../public/js/pad-zeropadding.js"></script>然后 附上我使用时的代码
var data= "132465";//需要加密的数据var key = CryptoJS.enc.Utf8.parse(‘1a1a1a1b1e1c1s12‘);var iv = CryptoJS.enc.Utf8.parse(‘1111111111111111‘);//上面2个参数不是很清楚,但是跟php文件中的参数要相同(长度为16位,其他位数暂未尝试)var encrypted = CryptoJS.AES.encrypt(data, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding });var msg = encrypted.toString();//结果为加密后的字符串 接下来是php文件
$pass = str_replace(‘ ‘,‘+‘,$pass);//第一个坑,上面之所以要把字符串中的空格给替换为‘+‘,不替换下面解码会出错!!!(这个是解决掉下面的坑后再测试时发现,有些加密解密会成功,有些会失败,把加密后的字符串独立拿出来时才发现这个问题)$privateKey = "1a1a1a1b1e1c1s12";$iv = "1111111111111111";//上面2个要跟前面js文件的key和vi相同$encryptedData = base64_decode($pass);$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $privateKey, $encryptedData, MCRYPT_MODE_CBC, $iv);$decrypted =trim($decrypted);第二个坑,上2步结束后,如果不用trim方法,打印var_dump($decrypted),会输出加密前的值,但是!!!后面紧跟着一堆乱码!我查看源代码发现,这些是 ‘‘ 这个字符我一脸懵逼,搞了好多方法都没去掉(果然菜鸡),后来试了trim这个函数,马上就没了这些乱码(好气!),就完全获得到js加密前的密码了(好像很简单的样子)。。。。特地写了这篇文章来纪念我逝去的下午。tips:我都是用字母数字下划线测试的,汉子和特殊字符暂未测试!
时间: 2024-07-31 05:25:03