• 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 = CryptoJS.enc.Utf8.parse('1a1a1a1b1e1c1s12');
    var iv = CryptoJS.enc.Utf8.parse('1111111111111111');

    //上面2个参数'lalal...','111...'自己定义,但是跟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),会输出加密前的值,但是!!!后面紧跟着一堆乱码!
    我查看源代码发现,这些是 '&#0;' 这个字符我一脸懵逼,搞了好多方法都没去掉(果然菜鸡),后来试了trim这个函数,马上就没了这些
    乱码(好气!),就完全获得到js加密前的密码了(好像很简单的样子)。。。。特地写了这篇文章来纪念我逝去的下午。

    tips:我都是用字母数字下划线测试的,汉子和特殊字符暂未测试!
     
     
  • 相关阅读:
    微信小程序----map组件实现检索【定位位置】周边的POI
    nginx负载均衡和inotify+rsync文件同步
    mysql主从同步配置和读写分离实现(中间件Amoeba)
    微信小程序----Uncaught ReferenceError: ret is not defined
    微信小程序----wx:key(Now you can provide attr "wx:key" for a "wx:for" to improve performance.)
    回档|NOIP2012 同余方程
    回档|欧几里得算法和扩展欧几里得算法
    回档|Splay tree应用之郁闷的出纳员
    回档|史观小结
    回档|乘积最大
  • 原文地址:https://www.cnblogs.com/yexiaocangji/p/7397757.html
Copyright © 2020-2023  润新知