React Aes 对称加密(Crypto-js)

aes 对称 加密 / 解密
公司项目敏感数据较多,决定前后端进行接口加密处理,采用的是 AES + BASE64 算法加密~

AES加密简单介绍

高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:


image.png
实现

首先简单介绍一下 Crypto-js

crypto-js 是一个纯 javascript 写的加密算法类库 ,可以非常方便地在 javascript 进行 MD5、SHA1、SHA2、SHA3、RIPEMD-160 哈希散列,进行 AES、DES、Rabbit、RC4、Triple DES 加解密 GitHub

采用 npm 进行下载安装
npm install crypto-js --save
下面我们来定义两个函数,分别是加密和解密

const AES = require('crypto-js');
const key = AES.enc.Utf8.parse('0123456789ASDFGH'); //十六位十六进制数作为密钥
const iv = AES.enc.Utf8.parse('ASDFGH0123456789'); //十六位十六进制数作为密钥偏移量

// 加密
export function encrypt(word) {
  const src = AES.enc.Utf8.parse(word);
  const encrypted = AES.AES.encrypt(src, key, { iv, mode: AES.mode.CBC, padding: AES.pad.Pkcs7 });
  return encrypted.ciphertext.toString().toUpperCase();
};

// 解密
export function decrypt(word) {
  const encryptedHexStr = AES.enc.Hex.parse(word);
  const src = AES.enc.Base64.stringify(encryptedHexStr);
  const decrypt = AES.AES.decrypt(src, key, { iv, mode: AES.mode.CBC, padding: AES.pad.Pkcs7 });
  const decryptedStr = decrypt.toString(AES.enc.Utf8);
  return decryptedStr.toString();
}

注意密钥的长度由对称解密使用的算法是 AES-128-CBC 算法,数据采用 PKCS#7 填充 , 因此这里的 key 需要为16位!
我们通过 export default 暴漏出去 解密 decrypt 和 加密 encrypt 两个函数 方便在需要的时候进行引入并传入参数调用即可

你可能感兴趣的:(React Aes 对称加密(Crypto-js))