关于前后端分离传输数据加密的AES
最近项目中传输数据用到数据加密,通过百度知道存在对称加密与非对称加密,在这里只介绍AES对称加密!
AES加密要用到Cryptojs插件,用 npm 下载:npm i crypto-js
Cryptojs官网:https://www.npmjs.com/package/crypto-js
新建一个js文件;导入Crypto插件
import CryptoJS from ‘crypto-js/crypto-js.js’
创建一个加密函数
export function enterpassword(key, iv, password) {
key = CryptoJS.enc.Utf8.parse(key) //在引入CryptoJS时,初始化密钥(key)与偏移量(iv)的时候,必须对其进行转码,不然会报错,报错的原因可能是iv为undefined?
iv = CryptoJS.enc.Utf8.parse(iv)
var encryptedData = CryptoJS.AES.encrypt(password, key, {
iv: iv,
mode: CryptoJS.mode.CBC,//这是AES加密的模式,常用的有ECB,CBC等
padding: CryptoJS.pad.Pkcs7//填充模式,加密位数不够的时候填充方式
});
var encryptedBase64Str = encryptedData.toString(); //encryptedData为一个对象,需要将其进行tostring,转化成字符串才是我们需要的值
return (encryptedBase64Str)
}
创建一个解密函数
export function outpassword(key, iv, password) {
key = CryptoJS.enc.Utf8.parse(key)
iv = CryptoJS.enc.Utf8.parse(iv)
//这里可以不用对解密参数进行转码!!直接拿过来用
var decryptedata = CryptoJS.AES.decrypt(password, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 })
decryptedata = decryptedata.toString(CryptoJS.enc.Utf8)//转化出来的参数为一个对象,还是要给他转化成String类型的字符串,CryptoJS.enc.Utf8为转化成utf-8编码格式的字符串形式,不然看不懂!
console.log(decryptedata)
}
自用,可能哪里解释的有点离谱,望海涵 tip(上边的代码直接复制就可以用!)