首先安装cryptojs
npm install crypto-js
import CryptoJS from 'crypto-js' // 引入CryptoJS
const key = CryptoJS.enc.Utf8.parse('47FC4124CF94E070') // 密钥
const iv = CryptoJS.enc.Utf8.parse('ovOh2xYoRdfATob6') // 密钥偏移量
// 加密方法
const AesEncode = function (word) {
let srcs = CryptoJS.enc.Utf8.parse(word);
// 对称加密算法主要有AES、DES、3DES / 非对称加密算法主要有RSA、DSA、RCC
// iv(初始变量)
// key(加密密钥)
// mode(加密模式 主要有CBC(默认)、CFB、CTR、OFB、ECB)
// padding(填充方式 主要有Pkcs7(默认)、Iso97971、AnsiX923、Iso10126、ZeroPadding)
let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
let encryptedBase64Data = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
return encodeURIComponent(encryptedBase64Data);
}
// 解密方法
const AesDecode = function (word) {
word = decodeURIComponent(word)
let encryptedHexStr = CryptoJS.enc.Base64.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();
}
加密示例如下:
// 对hello进行加密
let str = AesEncode('hello')
console.log(str) // k1sj3bcoa%2BOWfzgEZyqYeA%3D%3D
// 对hello进行解密
let str1 = AesDecode('k1sj3bcoa%2BOWfzgEZyqYeA%3D%3D')
console.log(str1) // hello
cryptojs 采用的是对称加密,下面再来聊聊对称加密和非对称加密的差异:
对称加密
优点:算法公开、计算量小、加解密的效率高、加密速度快(加密和解密使用相同的密钥)
缺点:密钥的管理和分发上比较困难,不是非常安全,密钥管理负担很重
非对称加密
优点:安全性更高,公钥是公开的,密钥是自己保存的,不需要将私钥给别人
缺点:加密和解密花费时间长、速度慢,只适合对少量数据进行加密
解决办法
将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行
解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。
版权归原作者 王新焱 所有, 如有侵权,请联系我们删除。