在前端开发中我们经常会遇到对数据 加密 or 解密 的场景,着重介绍下常用的几种加密方式
一、sha1加密
javascript">const CryptoJS = require('crypto-js') // 引入AES
function sha1(params) {
return CryptoJS.SHA1(params).toString()
}
二、AES加解密
const CryptoJS = require('crypto-js') // 引入AES
/**
* @param data 明文/密文
* @param key 密钥
* @param iv 偏移量
*/
// key: '1qa2ws3ed4rf5tg122s'
// iv: 'test1234567890IV'
// 加密
function aesEncrypt(data, key, iv) {
let _key = CryptoJS.enc.Utf8.parse(key)
let _iv = CryptoJS.enc.Utf8.parse(iv)
// 或 let _iv = CryptoJS.lib.WordArray.random(16)
let encrypted = CryptoJS.AES.encrypt(_data, _key, {
iv: _iv, // 偏移量(初始向量), CBC/CFB模式需加偏移量
mode: CryptoJS.mode.CBC, // CBC/CFB/ECB模式
padding: CryptoJS.pad.Pkcs7 // padding处理,Pkcs5/Pkcs7/NoPadding
})
return encrypted.toString()
}
// 解密
function aesDecrypt(data, key, iv) {
let _key = CryptoJS.enc.Utf8.parse(key);
let _iv = CryptoJS.enc.Utf8.parse(iv);
let decrypt = CryptoJS.AES.decrypt(data, _key , {
iv: _iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
})
return decrypt.toString(CryptoJS.enc.Utf8)
}
【注】:加密时必须使用toString转成字符串,解密时必须使用utf8格式
三、base64加密
// 加密
let encryptData = btoa('Hello World!');
console.log(encryptData); // "SGVsbG8gV29ybGQh"
// 解密
let decryptData = atob(encryptData)
console.log(decodedString); // "Hello World!"
四、MD5加密
const CryptoJS = require('crypto-js') // 引入AES
function md5(params) {
return CryptoJS.MD5(params).toString()
}
四、编码/解码字符串
// 编码
escape(str)
encodeURI(str)
encodeURI***ponent(str)
// 解码
unescape(str)
decodeURI(str)
decodeURI***ponent(str)