Crypto- AES、MD5加密解密

crypto模块的目的是为了提供通用的加密和哈希算法,包含对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装。由于项目需求,我们这里讲crypto AES与MD5算法加密

首先我们需要引入Crypto,介绍俩种引入方式

  1. script便签直接引入
<script src="https://cdn.bootcss.com/crypto-js/4.0.0/crypto-js.js"></script>
  1. 通过NPM安装CryptoJS
npm install crypto-js

import CryptoJS from 'crypto-js/crypto-js'

下图为打印出的CryptoJS一些方法
Crypto- AES、MD5加密解密_第1张图片
下面进入加密正文

MD5
MD5是一种常用的哈希算法,用于给任意数据一个“签名”,下面举例展示了对数字1进行的MD5加密,并打印出加密后的密文。

function Md5 (string) {
     
  return CryptoJS.MD5(string)
}
Md5(1).toString() // 487f7b22f68312d2c1bbc93b1aea445b

AES
高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥
下面直接上AES加密解密代码:

import CryptoJS from 'crypto-js' // 引用crypto-js

const key = CryptoJS.enc.Utf8.parse('JtZ9RzYpN2tEVayl') // 十六位十六进制数作为密钥
const iv = CryptoJS.enc.Utf8.parse('JtZ9RzYpN2tEVayl') // 十六位十六进制数作为密钥偏移量

// 解密方法(Base64)
function Decrypt(word) {
     
  let decrypt = CryptoJS.AES.decrypt(word, key, {
      iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 })
  let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8)
  return decryptedStr.toString()
}

// 加密方法(Base64)
function Encrypt(word) {
       // word为Json字符串
  let srcs = CryptoJS.enc.Utf8.parse(word)
  let encrypted = CryptoJS.AES.encrypt(srcs, key, {
      iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 })
  return CryptoJS.enc.Base64.stringify(encrypted.ciphertext)
}

function Md5 (string) {
     
  return CryptoJS.MD5(string)
}

export {
     
  Decrypt,
  Encrypt,
  Md5
}

上面的代码中的 key 是密钥 ,密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则会导致密钥泄漏,通常是通过非对称加密算法加密密钥,然后再通过网络传输给对方,或者直接面对面商量密钥。为了方便,这里我们直接在代码中定义;iv 是密钥偏移量。
在进行AES加密过程中,还需要注意一些配置
Crypto- AES、MD5加密解密_第2张图片
Crypto- AES、MD5加密解密_第3张图片
如果无法正确解密,要确认双方是否遵循同样的AES算法,字符串密钥和IV是否相同,加密后的数据是否统一为hex或base64格式。

根据项目需求,首先我们将数据进行MD5加密作为接口的签名,接着将数据和接口签名拼接上进行AES加密,然后将AES加密后的密文进行base64加密,生成最终的密文
在这里使用axios封装post请求

function post(url, params = {
     }) {
     
  return new Promise((resolve, reject) => {
     
    params.sign = Md5(JSON.stringify(params)).toString() // md5加密 => 生成sign
    const encryption = Encrypt(JSON.stringify(params)) // // AES加密
    axios.post(url, {
     json: encryption})
      .then(res => {
     
        resolve(JSON.parse(Decrypt(res.data)))
      }, err => {
     
        reject(err)
      })
  })
}

由于后台返回的数据也是密文,因此我们需要进行解密,获取到json格式的数据,在这里都已经封装好嘞。

你可能感兴趣的:(javascript,vue.js,es6,npm)