UNPKG

js-databox

Version:

databox & metabox

65 lines (64 loc) 2.63 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AESEncryptApi = void 0; const crypto_js_1 = __importDefault(require("crypto-js")); class AESEncrypt { ArrayBufferToWordArray(arrayBuffer) { const u8 = new Uint8Array(arrayBuffer, 0, arrayBuffer.byteLength); const len = u8.length; const words = new Array(); for (let i = 0; i < len; i += 1) { words[i >>> 2] |= (u8[i] & 0xff) << (24 - (i % 4) * 8); } return crypto_js_1.default.lib.WordArray.create(words, len); } WordArrayToArrayBuffer(wordArray) { const { words } = wordArray; const { sigBytes } = wordArray; const u8 = new Uint8Array(sigBytes); for (let i = 0; i < sigBytes; i += 1) { u8[i] = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; } return u8; } AESEncData(metaData, key, iv) { let data; if (typeof metaData === "string") { const enc = new TextEncoder(); // always utf-8 data = this.ArrayBufferToWordArray(enc.encode(metaData).buffer); } else { data = this.ArrayBufferToWordArray(metaData); } // 这里的data是WordBuffer类型的数据 const bKey = crypto_js_1.default.enc.Hex.parse(key); // const bKey = CryptoJS.enc.Utf8.parse(key); const bIv = crypto_js_1.default.enc.Hex.parse(iv); // const bIv = CryptoJS.enc.Utf8.parse(iv); const encrypt = crypto_js_1.default.AES.encrypt(data, bKey, { iv: bIv, mode: crypto_js_1.default.mode.CBC, padding: crypto_js_1.default.pad.Pkcs7, }); return this.WordArrayToArrayBuffer(encrypt.ciphertext); } AESDecData(metaData, key, iv) { const data = exports.AESEncryptApi.ArrayBufferToWordArray(metaData); // 这里的data是WordBuffer类型的数据 const bKey = crypto_js_1.default.enc.Hex.parse(key); // const bKey = CryptoJS.enc.Utf8.parse(key); const bIv = crypto_js_1.default.enc.Hex.parse(iv); // const bIv = CryptoJS.enc.Utf8.parse(iv); //@ts-ignore const decrypt = crypto_js_1.default.AES.decrypt({ ciphertext: data }, bKey, { iv: bIv, mode: crypto_js_1.default.mode.CBC, padding: crypto_js_1.default.pad.Pkcs7, }); return this.WordArrayToArrayBuffer(decrypt); } } exports.AESEncryptApi = new AESEncrypt();