说明

AES:

  • ASE加密是对称加密,对称加密算法就是加密和解密用相同的密钥
  • AES加密需要引入crypto-js

crypto-js 是是谷歌开发的一个纯javaScript写的加密算法类库 。可以非常方便的在前端进行其所支持的加解密操作。目前crypto-js已支持的算法有:MD5、SHA-1、SHA-256、AES、RSA、Rabbit、MARC4、HMAC、HMAC-MD5、HMAC-SHA1、HMAC-SHA256、PBKDF2等。使用时可以引用总文件,也可以单独引用某一文件。

首先要了解下aes的ecb是什么?
ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。它还有一种算法是cbc;
CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或或操作后再加密,这样做的目的是增强破解难度。(不容易主动攻击,安全性好于ECB,是SSL、IPSec的标准)
参考

RSA:

RSA加密算法是一种非对称加密算法。
在公开密钥加密和电子商业中RSA被广泛使用
RSA算法是第一个可以同时用于加密和数字签名的算法。
参考

项目要求:
1、因为项目中有涉及到电话号码和身份证比较敏感的数据,所以领导要求这些数据要显示时需要加密;
2、数据加密传输的算法采用rsa+aes算法,rsa用于传输aes的密钥,aes用于加密传输的明文
3、aes算法选用aes-128-ecb(值得注意的是密钥的长度,由于对称解密使用的算法是 AES-128-CBC算法,数据采用 PKCS#7 填充 , 因此到时候密钥 key 需要为16位!)。
4、前后端都要实现aes的加密解密方法。

rsa安装

使用命令安装:npm install jsencrypt

rsa引用

import JSEncrypt from ‘jsencrypt’

rsa 加密

ras解密


aes安装

1、可直接到gitHab上下载源码
2、也可使用命令安装:npm install crypto-js —save

在使用命令安装时发生了一个小问题;
我使用的 npm install crypto-js —save 命令安装,会报错:
报错的大概意思是已经在使用中?没权限?
image.png
已经在使用中?查了package.json文件没有看到有安装过。
没权限?这是不可能的呀,以前又不是没安装过其它插件。
后面看了下package-lock.json文件,看到都是用的淘宝镜像安装的,想到是不是应该用cnpm来安装才对;试了下果然是这样;用cnpm install crypto-js —save就安装成功了。
image.png

aes引用

const CryptoJS = require(‘crypto-js’);

aes加密(实际项目中未用到)

  1. /**
  2. * aes加密方法
  3. * @param secretKey 密钥
  4. * @param content 要加密的字符串
  5. * @returns {string} 加密结果
  6. */
  7. AesEncrypt(secretKey,content) {
  8. let key = CryptoJS.enc.Utf8.parse(secretKey);
  9. let srcs = CryptoJS.enc.Utf8.parse(content);
  10. let encrypted = CryptoJS.AES.encrypt(srcs, key, {
  11. mode: CryptoJS.mode.ECB,
  12. padding: CryptoJS.pad.Pkcs7
  13. });
  14. //返回base64
  15. // CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
  16. return encrypted.toString();
  17. },

aes解密

  1. /**
  2. * aes解密方法
  3. * @param secretKey 密钥
  4. * @param encryptStr 密文
  5. * @returns {string} 明文
  6. */
  7. AesDecrypt(secretKey,encryptStr) {
  8. if(!!encryptStr){
  9. let key = CryptoJS.enc.Utf8.parse(Base64.decode(secretKey));
  10. let decrypt = CryptoJS.AES.decrypt(encryptStr, key, {
  11. mode: CryptoJS.mode.ECB,
  12. padding: CryptoJS.pad.Pkcs7
  13. });
  14. return CryptoJS.enc.Utf8.stringify(decrypt).toString();
  15. }else{
  16. return
  17. }
  18. },

rsa参考资料:js链接java链接
aes参考资料:java+js 链接