crypto-js CryptoJS.enc.u8array方法补充

正文开始

这个代码是从网上摘录的,在插件源文件中是没有的。内容如下: ~~~ CryptoJS.enc.u8array = { /** * Converts a word array to a Uint8Array. * * @param {WordArray} wordArray The word array. * * @return {Uint8Array} The Uint8Array. * * @static * * @example * * var u8arr = CryptoJS.enc.u8array.stringify(wordArray); */ stringify: function (wordArray) { // Shortcuts var words = wordArray.words; var sigBytes = wordArray.sigBytes; // Convert var u8 = new Uint8Array(sigBytes); for (var i = 0; i < sigBytes; i++) { var byte = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; u8[i]=byte; } return u8; }, /** * Converts a Uint8Array to a word array. * * @param {string} u8Str The Uint8Array. * * @return {WordArray} The word array. * * @static * * @example * * var wordArray = CryptoJS.enc.u8array.parse(u8arr); */ parse: function (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); } }; 插件本身提供一个key、iv、明文均是WordArray的加密方法,而这个WordArray的数据格式长得非常像uint8数据,而 这个组件的组件的功能就是是uint8数组和WordArray之间的互相转换。 那么有了它我们就可以进行加解密了。 // 服务端提供的32位key var akey = [0x26,0xAF,0xE2,0x1A,0x0C,0x16,0x73,0x54,0x13,0xFD,0x68,0xDD,0x8F,0xA0,0xB7,0xC1,0x57,0xA6,0x90,0xFF,0xCD,0xB3,0x54,0x61,0x10,0x07,0xD5,0x7E,0xDB,0x1E,0x4C,0xE9]; // 服务端提供的16位iv var aiv = [0x15,0x4C,0xD3,0x55,0xFE,0xA1,0xFF,0x01,0x00,0x34,0xAB,0x22,0x08,0x4F,0x13,0x07]; // 将key和iv转换成uint8数组 var keyBv = new Uint8Array(akey); var ivBv = new Uint8Array(aiv); // 将key和iv转换成WordArray keyWA = CryptoJS.enc.u8array.parse(keyBv); ivWA = CryptoJS.enc.u8array.parse(ivBv); // 解密方法 传入密文的uint8数组 function decryptU8arry(array) { var acontent = array; // 将密文转换成WordArray contentWA = CryptoJS.enc.u8array.parse(acontent); // 插件要求密文是base64格式 var dcBase64String = contentWA.toString(CryptoJS.enc.Base64); // 解密 选定mode是CFB类型,无偏移量 var decrypted = CryptoJS.AES.decrypt(dcBase64String, keyWA, { iv: ivWA,mode:CryptoJS.mode.CFB,padding:CryptoJS.pad.NoPadding}); // 将解密后的明文转回uint8数组 var bv = CryptoJS.enc.u8array.stringify(decrypted); return bv; } // 加密方法 传入明文的uint8数组 function encryptU8arry(array) { var acontent = array; // 将明文转换成WordArray contentWA = CryptoJS.enc.u8array.parse(acontent); // 插件要求明文是base64格式 var dcBase64String = contentWA.toString(CryptoJS.enc.Base64); // 加密 选定mode是CFB类型,无偏移量 var encrypted = CryptoJS.AES.encrypt(contentWA, keyWA, { iv: ivWA,mode:CryptoJS.mode.CFB,padding:CryptoJS.pad.NoPadding}); // 将密文转回uint8数组 var bv = CryptoJS.enc.u8array.stringify(encrypted.ciphertext); return bv; } var aData = [0,1,2,3,4]; var dv = new Uint8Array(aData); var enu8 = encryptU8arry(dv); // 加密后的二进制流 console.log(enu8); var deu8 = decryptU8arry(enu8); // 解密后的二进制流 console.log(deu8); ~~~

正文结束

js 正则替换返回值做回调函数 jq两大滚动条插件 slimScroll /Nanoscroller