js加密php解密(CryptoJS)碰到的坑
今天做了⼀个功能,需要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 = Utf8.parse('1a1a1a1b1e1c1s12');
var iv = Utf8.parse('1111111111111111');
/
/上⾯2个参数'',''⾃⼰定义,但是跟php⽂件中的参数要相同(长度为16位,其他位数暂未尝试)
var encrypted = pt(data, key, { iv: iv, mode: de.CBC, padding: CryptoJS.pad.ZeroPadding });
var msg = String();//结果为加密后的字符串
接下来是php⽂件
$pass = str_replace(' ','+',$pass);
js代码加密软件//第⼀个坑,上⾯之所以要把字符串中的空格给替换为'+',不替换下⾯解码会出错!!!
(这个是解决掉下⾯的坑后再测试时发现,有些加密解密会成功,有些会失败,把加密后的字符串独⽴拿出来时才发现这个问题)
$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:我都是⽤字母数字下划线测试的,汉⼦和特殊字符暂未测试!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论