50 lines
1.2 KiB
TypeScript
50 lines
1.2 KiB
TypeScript
|
|
import CryptoJS from 'crypto-js'
|
||
|
|
|
||
|
|
/**
|
||
|
|
* AES128ECBEncrypt 加密方法
|
||
|
|
*/
|
||
|
|
export function AES128ECBEncrypt(inputText: any, key: any) {
|
||
|
|
const inputArr = []
|
||
|
|
while (inputText.length < 32) {
|
||
|
|
inputText += '0'
|
||
|
|
}
|
||
|
|
for (let i = 0; i < inputText.length / 2; i++) {
|
||
|
|
inputArr.push(Number.parseInt(inputText.substring(i * 2, i * 2 + 2), 16))
|
||
|
|
}
|
||
|
|
const inputParse = int8arrayParse(inputArr)
|
||
|
|
const keyParse = CryptoJS.enc.Utf8.parse(key)
|
||
|
|
const n = CryptoJS.AES.encrypt(inputParse, keyParse, {
|
||
|
|
iv: [],
|
||
|
|
mode: CryptoJS.mode.ECB,
|
||
|
|
padding: CryptoJS.pad.NoPadding,
|
||
|
|
})
|
||
|
|
const w = int8arrayStringify(n.ciphertext)
|
||
|
|
const encryptStr = bufTohex(w.buffer)
|
||
|
|
return encryptStr
|
||
|
|
}
|
||
|
|
|
||
|
|
export function bufTohex(buffer) {
|
||
|
|
return Array.prototype.map.call(new Uint8Array(buffer), x => (`00${x.toString(16)}`).slice(-2)).join('')
|
||
|
|
}
|
||
|
|
|
||
|
|
export function int8arrayParse(e: any) {
|
||
|
|
const r = e.length
|
||
|
|
const i = []
|
||
|
|
let n = 0
|
||
|
|
for (; n < r; n++) {
|
||
|
|
i[n >>> 2] |= (255 & e[n]) << 24 - n % 4 * 8
|
||
|
|
}
|
||
|
|
return CryptoJS.lib.WordArray.create(i, r)
|
||
|
|
}
|
||
|
|
|
||
|
|
export function int8arrayStringify(t: any) {
|
||
|
|
const e = t.words
|
||
|
|
const r = t.sigBytes
|
||
|
|
const i = new Int8Array(r)
|
||
|
|
let n = 0
|
||
|
|
for (; n < r; n++) {
|
||
|
|
i[n] = e[n >>> 2] >> 24 - n % 4 * 8 & 255
|
||
|
|
}
|
||
|
|
return i
|
||
|
|
}
|