注:参考网络文章修改
测试:
var MYAES = require('../../utils/AES.js');
var data = [255, 255, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(data);
var aesdata = MYAES.aesCbcPkcs7Encrypt(data, [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F]);
console.log(aesdata);
var srcdata = MYAES.aesCbcPkcs7Decrypt(aesdata, [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F]);
console.log(srcdata);
AES.js
var CryptoJS = require('./crypto.js');
function wordArrayToUint8 (array) {
var bin = new Uint8Array(array.length * 4);
for(var i = 0; i < array.length; i++) {
var num = array[i];
if (num < 0) {
num = array[i] + 0x100000000;
}
bin[i * 4 + 0] = (num >>> 24) & 0xFF;
bin[i * 4 + 1] = (num >>> 16) & 0xFF;
bin[i * 4 + 2] = (num >>> 8) & 0xFF;
bin[i * 4 + 3] = (num >>> 0) & 0xFF;
}
return bin;
};
var MYAES = {
// 构建WordArray对象
int8parse: function (u8arr) {
var len = u8arr.length;
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);
},
aesCbcPkcs7Encrypt: function (srcdata, aeskey) {
var data = this.int8parse(srcdata);//加密字符串
var key = this.int8parse(aeskey);//密钥
var iv = this.int8parse(aeskey);//与密钥保持一致
//加密
//var data = JSON.stringify(data);//将数据对象转换为json字符串
var encrypted = CryptoJS.AES.encrypt(data, key, {
iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
var retArray = new Int8Array(wx.base64ToArrayBuffer(encrypted));
return retArray;
},
aesCbcPkcs7Decrypt: function (aesdata, aeskey) {
var data = this.int8parse(aesdata);//加密字符串
var key = this.int8parse(aeskey);//密钥
var iv = this.int8parse(aeskey);//与密钥保持一致
//加密
//var data = JSON.stringify(data);//将数据对象转换为json字符串
var base64Str = CryptoJS.enc.Base64.stringify(data);
var decrypted = CryptoJS.AES.decrypt(base64Str, key, {
iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
var retArray = [];
if (decrypted.sigBytes > 0) {
retArray = wordArrayToUint8(decrypted.words);
}
console.log(retArray);
return retArray;
}
}
module.exports = MYAES
crypto.js
/*
CryptoJS v3.1.2
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
var CryptoJS = CryptoJS || function (u, p) {
var d = {
}, l = d.lib = {
}, s = function () {
}, t = l.Base = {
extend: function (a) {
s.prototype = this; var c = new s; a && c.mixIn(a); c.hasOwnProperty("init") || (c.init = function () {
c.$super.init.apply(this, arguments) }); c.init.prototype = c; c.$super = this; return c }, create: function () {
var a = this.extend(); a.init.apply(a, arguments); return a }, init: function () {
}, mixIn: function (a) {
for (var c in a) a.hasOwnProperty(c) && (this[c] = a[c]); a.hasOwnProperty("toString") && (this.toString = a.toString) }, clone: function () {
return this.init.prototype.extend(this) } },
r = l.WordArray = t.extend({
init: function (a, c) {
a = this.words = a || []; this.sigBytes = c != p ? c : 4 * a.length }, toString: function (a) {
return (a || v).stringify(this) }, concat: function (a) {
var c = this.words, e = a.words, j = this.sigBytes; a = a.sigBytes; this.clamp(); if (j % 4) for (var k = 0; k < a; k++)c[j + k >>> 2] |= (e[k >>> 2] >>> 24 - 8 * (k % 4) & 255) << 24 - 8 * ((j + k) % 4); else if (65535 < e.length) for (k = 0; k < a; k += 4)c[j + k >>> 2] = e[k >>> 2]; else c.push.apply(c, e); this.sigBytes += a; return this }, clamp: function () {
var a = this.words, c = this.sigBytes; a[c >>> 2] &= 4294967295 <<
32 - 8 * (c % 4); a.length = u.ceil(c / 4)
}, clone: function () {
var a = t.clone.call(this); a.words = this.words.slice(0); return a }, random: function (a) {
for (var c = [], e = 0; e < a; e += 4)c.push(4294967296 * u.random() | 0); return new r.init(c, a) }
}), w = d.enc = {
}, v = w.Hex = {
stringify: function (a) {
var c = a.words; a = a.sigBytes; for (var e = [], j = 0; j < a; j++) {
var k = c[j >>> 2] >>> 24 - 8 * (j % 4) & 255; e.push((k >>> 4).toString(16)); e.push((k & 15).toString(16)) } return e.join("") }, parse: function (a) {
for (var c = a.length, e = [], j = 0; j < c; j += 2)e[j >>> 3] |= parseInt(a.substr(j,
2), 16) << 24 - 4 * (j % 8); return new r.init(e, c / 2)
}
}, b = w.Latin1 = {
stringify: function (a) {
var c = a.words; a = a.sigBytes; for (var e = [], j = 0; j < a; j++)e.push(String.fromCharCode(c[j >>> 2] >>> 24 - 8 * (j % 4) & 255)); return e.join("") }, parse: function (a) {
for (var c = a.length, e = [], j = 0; j < c; j++)e[j >>> 2] |= (