后端使用DES加密,前端解密方法

前言:
现在为了防止用户直接篡改数据会采用加密的方式进行传输,加密的方法有很多种,这篇文章主要讲解下后端使用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(密文,密钥)

你可能感兴趣的:(前端)