官方文档:https://cryptojs.gitbook.io/docs/
AES (高级加密标准) 是美国联邦信息处理标准 (FIPS)。它是经过 5 年的过程,对 15 种竞争设计进行评估后选出的。CryptoJS 支持 AES-128、AES-192 和 AES-256。它将根据您传入的密钥的大小来选择变体。

1、安装

  1. npm install crypto-js

2、封装

  1. //引用AES源码js
  2. import CryptoJS from 'crypto-js'
  3. const key = CryptoJS.enc.Utf8.parse("1234123412ABCDEF");//十六位十六进制数作为密钥
  4. const iv = CryptoJS.enc.Utf8.parse('ABCDEF1234123412');//十六位十六进制数作为密钥偏移量
  5. //解密方法
  6. function Decrypt(word) {
  7. //返回的是解密后的对象
  8. let decrypt = CryptoJS.AES.decrypt(restoreBase64,key,{
  9. iv:iv,
  10. mode:CryptoJS.mode.CBC,
  11. padding:CryptoJS.pad.Pkcs7
  12. });
  13. //将解密对象转换成UTF8的字符串
  14. let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
  15. //返回解密结果
  16. return decryptedStr.toString();
  17. }
  18. //加密方法
  19. function Encrypt(word){
  20. let srcs = CryptoJS.enc.Utf8.parse(word);
  21. //CipherOption,加密的一些选项:
  22. //mode:加密模式,可取值(CBC,CFB,CTR,CTRGladman,OFB,ECB),都在CryptoJS.mode对象下
  23. //padding:填充方式,可取值(Pkcs7,Ansix923,Iso10126,ZeroPadding,NoPadding),都在CryptoJS.pad对象下
  24. //iv:偏移量,mode===ECB时,不需要iv
  25. //返回的是一个加密对象
  26. let encrypted = CryptoJS.AES.encrypt(srcs,key,{
  27. iv:iv,
  28. mode:CryptoJS.mode.CBC,
  29. padding:CryptoJS.pad.Pkcs7
  30. });
  31. //将结果进行base64加密
  32. return encrypted.ciphertext.toString(CryptoJS.enc.Base64);
  33. }
  34. export {Decrypt,Encrypt}

3、使用

  1. import {Encrypt} from "../../utils/secret";
  2. var userName = Encrypt(this.userName)//加密用户名
  3. var userPassword = Encrypt(this.password)//加密用户密码
  4. console.log('加密后:',userName)
  5. console.log('加密后:',userPassword)

4、加入rsa传递aes秘钥的情况处理(不推荐)

  1. // rsaHelper.js
  2. import JsEncrypt from 'jsencrypt/bin/jsencrypt'
  3. import { getKey, AESEnc, AESDec } from './lib/aes'
  4. export const rsaEncode = (string = '') => {
  5. // const RSA = new
  6. const publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCRQZ5O/AOAjeYAaSFf6Rjhqovws78I716I9oGF7WxCIPmcaUa1YuyLOncCCuPsaw69+RMWjdbOBp8hd4PPM/d4mKTOVEYUE0SfxhhDTZaM5CzQEUXUyXy7icQTGR5wBjrbjU1yHCKOf5PJJZZQWB06husSFZ40TdL7FdlBpZ1u1QIDAQAB";
  7. const encrypt = new JsEncrypt.JSEncrypt();
  8. encrypt.setPublicKey(publicKey);
  9. return encrypt.encrypt(string);
  10. }
  11. export const createKey = () => (getKey());
  12. export const AES_ENCODE = (key, string = '') => {
  13. if (!string) throw new Error('encry content is required');
  14. return AESEnc(key, string);
  15. }
  16. export const AES_DECODE = (key, string = '') => {
  17. if (!string) throw new Error('encry content is required');
  18. return AESDec(key, string);
  19. }
  20. // 使用
  21. // import { rsaEncode, AES_ENCODE, createKey } from '@/utils/rsaHelper';
  22. // rsaEncode, AES_ENCODE, createKey
  23. // const key = createKey();
  24. // const data = {
  25. // username: this.addData.userName,
  26. // password: AES_ENCODE(key, this.addData.passWord),
  27. // rsaEncryptKey: rsaEncode(key),
  28. // }