华西海圻ELN前端工程
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

36 lines
1.1 KiB

const CRYPTOJSKEY = '7LrjnqHv2mS5Qr5s'
import CryptoJS from 'crypto-js'
export function encrypt(plaintText) {
var plaintText = plaintText
var options = {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
}
var key = CryptoJS.enc.Utf8.parse(CRYPTOJSKEY)
var encryptedData = CryptoJS.AES.encrypt(plaintText, key, options)
var encryptedBase64Str = encryptedData.toString().replace(/\//g, '_')
encryptedBase64Str = encryptedBase64Str.replace(/\+/g, '-')
return encryptedBase64Str
}
export function decrypt(encryptedText) {
// 还原 URL 安全字符
let encryptedBase64Str = encryptedText
.replace(/_/g, '/') // 还原 _
.replace(/-/g, '+') // 还原 -
// 补充末尾的 =(如果需要)
const mod4 = encryptedBase64Str.length % 4
if (mod4) {
encryptedBase64Str += '='.repeat(4 - mod4)
}
try {
const key = CryptoJS.enc.Utf8.parse(CRYPTOJSKEY)
const decrypt = CryptoJS.AES.decrypt(encryptedBase64Str, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
})
return CryptoJS.enc.Utf8.stringify(decrypt).toString()
} catch (e) {
console.error('解密失败:', e)
return null
}
}