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