前言:
现在为了防止用户直接篡改数据会采用加密的方式进行传输,加密的方法有很多种,这篇文章主要讲解下后端使用DES加密的数据传输给前端,前端接收到之后如何去解密。
操作步骤如下:
1.安装crypto-js
npm install crypto-js
2.在使用的页面引入
const CryptoJS = require('crypto-js')
3.封装解密方法
// 注意这里封装的方法分为两种,一种是后端使用DES加密用到初始化向量iv的,一种是只有密文和密钥的// 使用初始化向量iv,ciphertext:密文,key:密钥const decryptDES = (ciphertext, key) => { const keyHex = CryptoJS.enc.Utf8.parse(key) // 注意,这里的向量是写死,如果是动态的, 则可以直接通过decrypt 方法传入。前端向量接收只能是整数类型的,但是后端给的向量一般是8字节/16字节,二进制的,这个时候就需要使用Uint8Array转成整数,如下 let ivBytes = new Uint8Array([8,7,6,5,4,3,2,1]) let ivHex = CryptoJS.lib.WordArray.create(ivBytes) let newText = CryptoJS.enc.Base64.parse(ciphertext) const decrypted = CryptoJS.DES.decrypt({ciphertext: newText}, keyHex, { iv: ivHex, mode: CryptoJS.mode.ECB, // 这里以ECB举例,如果是CBC直接把ECB替换下来即可 padding: CryptoJS.pad.Pkcs7, }) return decrypted.toString(CryptoJS.enc.Utf8)}// 只有密文和密钥,ciphertext:密文,key:密钥const decryptDES = (ciphertext, key) => { const keyHex = CryptoJS.enc.Utf8.parse(key) const decrypted = CryptoJS.DES.decrypt({ ciphertext: CryptoJS.enc.Base64.parse(ciphertext), }, keyHex, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }) return decrypted.toString(CryptoJS.enc.Utf8);// 上面代码解析:先使用 CryptoJS.enc.Base64.parse() 方法将 Base64 编码的字符串解码为 CryptoJS 中的 WordArray 对象,然后使用 CryptoJS.DES.decrypt() 方法对该对象进行解密
4.调用
decryptDES(密文,密钥)