说明
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 命令安装,会报错:
报错的大概意思是已经在使用中?没权限?
已经在使用中?查了package.json文件没有看到有安装过。
没权限?这是不可能的呀,以前又不是没安装过其它插件。
后面看了下package-lock.json文件,看到都是用的淘宝镜像安装的,想到是不是应该用cnpm来安装才对;试了下果然是这样;用cnpm install crypto-js —save就安装成功了。
aes引用
const CryptoJS = require(‘crypto-js’);
aes加密(实际项目中未用到)
/**
* aes加密方法
* @param secretKey 密钥
* @param content 要加密的字符串
* @returns {string} 加密结果
*/
AesEncrypt(secretKey,content) {
let key = CryptoJS.enc.Utf8.parse(secretKey);
let srcs = CryptoJS.enc.Utf8.parse(content);
let encrypted = CryptoJS.AES.encrypt(srcs, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
//返回base64
// CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
return encrypted.toString();
},
aes解密
/**
* aes解密方法
* @param secretKey 密钥
* @param encryptStr 密文
* @returns {string} 明文
*/
AesDecrypt(secretKey,encryptStr) {
if(!!encryptStr){
let key = CryptoJS.enc.Utf8.parse(Base64.decode(secretKey));
let decrypt = CryptoJS.AES.decrypt(encryptStr, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}else{
return
}
},