75 lines
2.5 KiB
TypeScript
75 lines
2.5 KiB
TypeScript
import CryptoJS from 'crypto-js';
|
|
|
|
export class Encrypt {
|
|
static encrypt(buf: string | object | Uint8Array): string | object | Uint8Array {
|
|
// if (buf instanceof Uint8Array && !buf.encrypt) {
|
|
// return encryptUint8Array(buf);
|
|
// }
|
|
return buf;
|
|
}
|
|
static decrypt(buf: string | object | Uint8Array): string | object | Uint8Array {
|
|
if (buf instanceof Uint8Array) {
|
|
return decryptUint8Array(buf);
|
|
}
|
|
return buf;
|
|
}
|
|
}
|
|
|
|
let aIv = [0x15, 0x4C, 0xD3, 0x55, 0xFE, 0xA1, 0xFF, 0x01, 0x00, 0x34, 0xAB, 0x22, 0x08, 0x4F, 0x13, 0x07];
|
|
let 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];
|
|
let ivBv = new Uint8Array(aIv);
|
|
let keyBv = new Uint8Array(aKey);
|
|
let u8array = {
|
|
parse: function (u8arr: Uint8Array) {
|
|
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);
|
|
},
|
|
stringify: function (wordArray: CryptoJS.lib.WordArray) {
|
|
var words = wordArray.words;
|
|
var sigBytes = wordArray.sigBytes;
|
|
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;
|
|
}
|
|
};
|
|
|
|
const keyWA = u8array.parse(keyBv);
|
|
const ivWA = u8array.parse(ivBv);
|
|
|
|
export function encryptUint8Array(array: Uint8Array) {
|
|
for (let i = 0; i < array.length; ++i) {
|
|
array[i] -= 1;
|
|
}
|
|
let contentWA = u8array.parse(array);
|
|
// let dcBase64String = contentWA.toString(CryptoJS.enc.Base64);
|
|
let encrypted = CryptoJS.AES.encrypt(contentWA, keyWA, {
|
|
iv: ivWA,
|
|
mode: CryptoJS.mode.CFB,
|
|
padding: CryptoJS.pad.NoPadding
|
|
});
|
|
let u8 = u8array.stringify(encrypted.ciphertext);
|
|
return u8;
|
|
}
|
|
|
|
function decryptUint8Array(array: Uint8Array) {
|
|
let contentWA = u8array.parse(array);
|
|
let dcBase64String = contentWA.toString(CryptoJS.enc.Base64);
|
|
let decrypted = CryptoJS.AES.decrypt(dcBase64String, keyWA, {
|
|
iv: ivWA,
|
|
mode: CryptoJS.mode.CFB,
|
|
padding: CryptoJS.pad.NoPadding
|
|
});
|
|
let buf = u8array.stringify(decrypted);
|
|
for (let i = 0; i < buf.length; ++i) {
|
|
buf[i] += 1;
|
|
}
|
|
return buf;
|
|
}
|