一般来说,都是md5加密密码。但是我司后台,用的是aes家秘密,然后还有密匙之类的。
折腾了老半天,总算解决了。
记录一下。
AES加密,js有一个牛逼的算法库,crypto-js。
封装成工具函数,在使用的地方引用。
// 密码加密
// const CryptoJS = require ('crypto-js')
import CryptoJS from 'crypto-js'
const key = CryptoJS.enc.Utf8.parse('abcdefrt69845632') // 密匙
const iv = CryptoJS.enc.Utf8.parse('2516325478965124') // 偏移量
// 解密方法
// function Decrypt (word) {
// let encryptedHexStr = CryptoJS.enc.Hex.parse(word)
// let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr)
// let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 })
// let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8)
// return decryptedStr.toString()
// }
// 加密方法
export function Encrypt (word) {
let srcs = CryptoJS.enc.Utf8.parse(word)
let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 })
return encrypted.toString()
// return encrypted.ciphertext.toString()
}
我司,采用的是 CBC模式,密匙和偏移量,与后台确定,都是16位的。
如果加密后的密文,需要16进制返回的,使用 return encrypted.ciphertext.toString()
我司,使用的是base64格式的, 使用直接使用 return encrypted.toString()
这个破地方,我试了好久,才找到正确的。不提了,心塞。