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号
浙公网安备 33010602011771号