美文网首页微信小程序FrontEnd
关于CryptoJS AES后输出hex的16进制和Base64

关于CryptoJS AES后输出hex的16进制和Base64

作者: I_YoYo | 来源:发表于2018-03-29 11:21 被阅读279次

    遇到问题是在微信小程序里面(当然和网页的js也是一样),都是使用库CryptoJS。发现它默认输出是16进制,但是服务器解析时候是需要Base64的。

    可以到第三方网站测试 http://tool.chacuo.net/cryptaes
    如:

    加密模式:CBC
    填充pkcs7或pkcs5
    key = "keykeykeykeykeyk";
    iv = '1234567887654321';
    str ="这是测试数据";
    hex结果"890645269898FC89010F7651372C0F38817DD57BAA12552EFAF418398F3E08CA"
    base64结果"iQZFJpiY/IkBD3ZRNywPOIF91XuqElUu+vQYOY8+CMo="
    

    解决需要转成Base64的解决方法:

    var fun_aes = require('../../utils/libs/aes.js')
    var key = fun_aes.CryptoJS.enc.Utf8.parse("keykeykeykeykeyk");
    var iv = fun_aes.CryptoJS.enc.Utf8.parse('1234567887654321');
    
    function AES_Encrypt(word) {
      var srcs = fun_aes.CryptoJS.enc.Utf8.parse(word);
      var encrypted = fun_aes.CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: fun_aes.CryptoJS.mode.CBC, padding: fun_aes.CryptoJS.pad.Pkcs7 });
      var hexStr = encrypted.ciphertext.toString().toUpperCase();
    
      console.log('hexStr->' + hexStr);
      var oldHexStr = fun_aes.CryptoJS.enc.Hex.parse(hexStr);
      // 将密文转为Base64的字符串
      var base64Str = fun_aes.CryptoJS.enc.Base64.stringify(oldHexStr);
      console.log('base64Str->' + base64Str);
    //这里根据需求返回 base64Str 或 hexStr(解密时有小小差别)
      return hexStr;
    }
    
    结果.png

    解密Base64后的

    function AES_Decrypt(word) {
      console.log('word->' + word);
    //如果加密返回的base64Str
     var srcs = word;
    //若上面加密返回的hexStr,需打开下面两行注释,再次处理
     //var encryptedHexStr = fun_aes.CryptoJS.enc.Hex.parse(word);
     // var srcs = fun_aes.CryptoJS.enc.Base64.stringify(encryptedHexStr);
      var decrypt = fun_aes.CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: fun_aes.CryptoJS.mode.CBC, padding: fun_aes.CryptoJS.pad.Pkcs7 });
      var decryptedStr = decrypt.toString(fun_aes.CryptoJS.enc.Utf8);
      var value = decryptedStr.toString();
      console.log('value->'+value);
      return value;
    }
    
    解密base64Str.png 解密hexStr.png

    js下载路径
    有什么错误欢迎批评指正 。

    相关文章

      网友评论

      • 虫虫xq:你好,加密没问题,但是在解码时报
        var decrypt = CryptoJS.AES.decrypt(srcs, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });
        Cannot read property 'parse' of undefined cipher-core-min.js:12

      本文标题:关于CryptoJS AES后输出hex的16进制和Base64

      本文链接:https://www.haomeiwen.com/subject/iocmcftx.html