47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
import CryptoJS from 'crypto-js/crypto-js'
|
|
import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'
|
|
import { Base64 } from 'js-base64'
|
|
import { useCache } from '@/hooks/web/useCache'
|
|
import { useAppStoreWithOut } from '@/store/modules/app'
|
|
|
|
const appStore = useAppStoreWithOut()
|
|
|
|
const { wsCache } = useCache()
|
|
|
|
const rsaKey = '-pk_separator-'
|
|
const crypt = new JSEncrypt()
|
|
|
|
const aesDecrypt = (word, keyStr) => {
|
|
const keyHex = CryptoJS.enc.Utf8.parse(keyStr) //
|
|
const ivHex = CryptoJS.enc.Utf8.parse('0000000000000000')
|
|
const decrypt = CryptoJS.AES.decrypt(word, keyHex, {
|
|
iv: ivHex,
|
|
mode: CryptoJS.mode.CBC,
|
|
padding: CryptoJS.pad.Pkcs7
|
|
})
|
|
return decrypt.toString(CryptoJS.enc.Utf8)
|
|
}
|
|
|
|
export const rsaEncryp = word => {
|
|
const separator = Base64.encodeURI(rsaKey) + '='
|
|
const dekey = wsCache.get(appStore.getDekey)
|
|
const keyArray = dekey.split(separator)
|
|
const k1 = keyArray[0]
|
|
const k2 = keyArray[1]
|
|
const pk = aesDecrypt(k1, k2)
|
|
crypt.setKey(pk)
|
|
return crypt.encrypt(word)
|
|
}
|
|
|
|
export const symmetricDecrypt = (data, keyStr) => {
|
|
const iv = CryptoJS.enc.Utf8.parse('0000000000000000')
|
|
const key = CryptoJS.enc.Base64.parse(keyStr)
|
|
const decodedCiphertext = CryptoJS.enc.Base64.parse(data)
|
|
const decrypted = CryptoJS.AES.decrypt({ ciphertext: decodedCiphertext }, key, {
|
|
iv: iv,
|
|
mode: CryptoJS.mode.CBC,
|
|
padding: CryptoJS.pad.Pkcs7
|
|
})
|
|
return decrypted.toString(CryptoJS.enc.Utf8)
|
|
}
|