• JavaScript的CryptoJS AES/ECB/NoPadding加密,可与JAVA objective-c 进行同步加解密


    公司一个蓝牙锁需要把重要协议进行加密传输,硬件结构、加密模式不变,微信小程序、安卓、IOS三端同步加解密。

    百度谷歌资料查了不少,都是用CryptoJS。

    加解密是没什么问题,只是跟我想要的有点不一样,我们的加密不需要偏移量,所以得稍做修改。

    加密模式使用AES/ECB/NoPadding

    需要用到网上找到的aes.js mode-ecb.js pad-nopadding.js文件

    实际项目用在小程序 这里用JS做Demo
    先引入文件

        <script src="./rollups/aes.js?v=1.1"></script>
        <script src="./components/mode-ecb.js?v=1.0"></script>
        <script src="./components/pad-nopadding.js?v=1.0"></script>

    开始加密

    这里要注意的是

    1. 加密的Bytes数组里面的某个值不能超出127,需要用new Int8Array()
    2. CryptoJS传进去的是wordArray类型
    3. Int8parse()方法
    //这里是加密所需要的key
     var key_Int = new Int8Array([32,87,47,82,54,75,63,71,48,80,65,88,17,99,45,43]);
     var keyBytes = Int8parse(key_Int); // 数据解析
    
     function Encrypt(){  
         //需要加密的bytes数组
         var srcs_Int = new Int8Array([16,1,4,59,80,65,245,0,0,0,0,0,0,0,0,0]);
         var srcsBytes = Int8parse(srcs_Int); // 数据解析
         var encrypted = CryptoJS.AES.encrypt(srcsBytes, keyBytes, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.NoPadding}); 
    
         return encrypted.toString();  
      }  

    Int8parse() 是网上找的方法,为了解决转成wordArray的时候有的值太大造成位数超出加密失败

      function Int8parse(u8arr) {
          // Shortcut
          var len = u8arr.length;
    
          // Convert
          var words = [];
          for (var i = 0; i < len; i++) {
              words[i >>> 2] |= (u8arr[i] & 0xff) << (24 - (i % 4) * 8);
          }
    
          return CryptoJS.lib.WordArray.create(words, len);
      }

    加密完成,下面是解密

    解密就挺简单的了,什么都不用改,直接传加密过后的base-64字符串进去就OK

    function Decrypt(word){  
    
       var decrypt = CryptoJS.AES.decrypt(word, keyBytes, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.NoPadding});  
    
       return CryptoJS.enc.Hex.stringify(decrypt).toString();  
    }  

    打印一下加解密结果

    console.log(encrypted())
    console.log(hexToBytes(Decrypt(encrypted)))
    
    cGLRRwWc6iCOvD9RPhgaXA==
    [16, 1, 4, 59, 80, 65, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0]

    OK,大功告成。顺便附上代码链接 https://github.com/243504330/AES-ECB-NoPadding/tree/master


    ————————————————
    版权声明:本文为CSDN博主「秋水浮萍任飘渺」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_38608490/article/details/77113216

  • 相关阅读:
    【Python大系】Python快速教程
    【Linux大系】Linux的概念与体系
    【Java大系】Java快速教程
    【夯实PHP系列】PHP正则表达式
    【PHP夯实基础系列】PHP日期,文件系统等知识点
    【夯实PHP系列】购物车代码说明PHP的匿名函数
    2016.09.21 公司裁员想到的
    使用android-junit-report.jar导出单元测试报告
    APK无源码使用Robotium简单总结
    Android环境安装简单总结
  • 原文地址:https://www.cnblogs.com/Im-Victor/p/15161771.html
Copyright © 2020-2023  润新知