npm install crypto-js
// des.ts
import CryptoJS from 'crypto-js'
// 随机生成指定数量的16进制key(该方法非必须,可直接指定固定key值,看后端怎么定义key和偏移量)
const generatekey = (num) => {
const library = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
let key = ""
for (let i = 0; i < num; i++) {
const randomPoz = Math.floor(Math.random() * library.length)
key += library.substring(randomPoz, randomPoz + 1)
}
return key
}
//DES加密 Pkcs7填充方式
const encrypt = (message, key = '123456', iv = '123456') => {
const keyHex = CryptoJS.enc.Utf8.parse(key) // 秘钥
const ivHex = CryptoJS.enc.Utf8.parse(iv) // 偏移量
const option = { iv: ivHex, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 } // Pkcs7填充方式
const encrypted = CryptoJS.DES.encrypt(message, keyHex, option)
return encrypted.toString() // 加密出来为 hex格式密文
}
// 解密
const decrypt = (message, key = '123456', iv = '123456') => {
const keyHex = CryptoJS.enc.Utf8.parse(key)
const ivHex = CryptoJS.enc.Utf8.parse(iv)
const decrypted = CryptoJS.DES.decrypt({
ciphertext: CryptoJS.enc.Hex.parse(message)
}, keyHex, {
iv: ivHex,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
})
return decrypted.toString(CryptoJS.enc.Utf8)
}
export {
encrypt,
decrypt
}
import { encrypt, decrypt } from '@/utils/des'
// 参数
const params = {
password: encrypt(password.value),
}
前后端 秘钥和偏移量要一致,字母数字都可以的
让后端给密码和加密后的密文以及后端Java加密代码,调试出来的密文一样就可以了