crypto-js加密
为了保证数据库中存储的密码更安全,则需要在后端用多种单向(非对称)加密手段混合进行加密存储。前端加密后端又需要解密,所以需要对称加密算法,即前端使用 encrypted = encrypt(password+key),后端使用 password = decrypt(encrypted +key) ,前端只传输密码与key加密后的字符串encrypted ,这样即使请求被拦截了,也知道了加密算法,但是由于缺少key所以很难破解出明文密码。所以这个key很关键。而这个key是由后端控制生成与销毁的,用完即失效,所以即使可以模拟用加密后的密码来发请求模拟登录,但是key已经失效了,后端还是验证不过的。
import CryptoJS from 'crypto-js'
function getAesString(data, key, iv) { // 加密
var keys = CryptoJS.enc.Utf8.parse(key)
var ivs = CryptoJS.enc.Utf8.parse(iv)
var encrypted = CryptoJS.AES.encrypt(data, keys,
{
iv: ivs,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
})
return encrypted.toString() // 返回的是base64格式的密文
}
function getDAesString(encrypted, key, iv) { // 解密
var keys = CryptoJS.enc.Utf8.parse(key)
var ivs = CryptoJS.enc.Utf8.parse(iv)
var decrypted = CryptoJS.AES.decrypt(encrypted, keys,
{
iv: ivs,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
})
return decrypted.toString(CryptoJS.enc.Utf8)
}
export function getAES(data) { // 加密
var key = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' // 密钥
var iv = '1234567812345678'
var encrypted = getAesString(data, key, iv) // 密文
// var encrypted1 = CryptoJS.enc.Utf8.parse(encrypted)
return encrypted
}
export function getDAes(data) { // 解密
var key = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' // 密钥
var iv = '1234567812345678'
var decryptedStr = getDAesString(data, key, iv)
return decryptedStr
}
密码加密和解密后


浙公网安备 33010602011771号