HJ_Server/src/encrypt.ts
DESKTOP-15R5JU0\legu 97e070ea81 init
2023-11-17 12:02:12 +08:00

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;
}