前端最常见的加密方式就是CryptoJs的AES(对称加密)和RSA(非对称加密),另外还有哈希算法(SHA-256)和JWT进行身份验证
AES和RSA的用法:
AES前端的代码
//前端模块
npm install crypto-js;
const CryptoJs = require('crypto-js')
//import CryptoJS from 'crypto-js';
//在定义一个和后端协定的定义密钥
const secretKey = 'your-secret-key'; // 定义密钥
//加密的函数
function encryptData(data){
const cypherText = CryptoJs.AES.encrypt(JSON.stringify(data),secretKey).toString();//加密文本cyphertext
return cypherText;
}
//解密的函数
function decryptData(cyphertext){
const bytes = CryptoJs.AES.decrypt(cyphertext,secretKey);//decrypt之后的是二进制的byte数据,需要在此转换为json格式
const decryptData = JSON.parse(bytes.toString(CryptoJs.enc.Utf8)) //这里toString还能传参数也是第一次,后期需要取深入了解toString()
return decryptData;
}
//前端使用就引入以上的方法,直接调用使用
// 使用示例
const data = { message: 'Hello, World!' };
const encrypted = encryptData(data);
console.log('Encrypted:', encrypted);
const decrypted = decryptData(encrypted);
console.log('Decrypted:', decrypted);
//对报文的加密只需要在拦截器中对config.data和response.data调用以上方法进行加密解密即可
RSA前端的代码
//前端模块 使用的是jsencrypt
npm install jsencrypt
const JSEncrypt = require('jsencrypt')
//import JSEncrypt from 'jsencrypt';
和对称加密的一个区别就是,对称加密是约定一个密钥,这个密钥具体和后端协商,需要统一
//这个密钥在后端nodejs中可以使用cryptojs中的加密长度,使用适当长度的密钥。AES-256 需要 32 字节的密钥,AES-192 需要 24 字节的密钥,AES-128 需要 16 字节的密钥
//而非对称加密就是利用rsa,就是我们在创建git公钥时候的那两个私钥和公钥
// 生成 RSA 密钥对
const publicKey = ``;
const privateKey = ``;
//创建加密器
const encryptor = new JSEncrypt();
encryptor.setPublicKey(publicKey);
encryptor.setPrivateKey(privateKey);
// 加密函数
function encryptData(data) {
const ciphertext = encryptor.encrypt(JSON.stringify(data));
return ciphertext;
}
// 解密函数
function decryptData(ciphertext) {
const decryptedData = JSON.parse(encryptor.decrypt(ciphertext));
return decryptedData;
}
//前端使用就引入以上的方法,直接调用使用
// 使用示例
const data = { message: 'Hello, World!' };
const encrypted = encryptData(data);
console.log('Encrypted:', encrypted);
const decrypted = decryptData(encrypted);
console.log('Decrypted:', decrypted);
//对报文的加密只需要在拦截器中对config.data和response.data调用以上方法进行加密解密即可
哈希算法 (Hashing) - SHA-256 这个本人在开发中是没用过,只用作为了解做了总结
// 导入 CryptoJS
import CryptoJS from 'crypto-js';
// 哈希函数
function hashData(data) {
const hash = CryptoJS.SHA256(data).toString(CryptoJS.enc.Hex);
return hash;
}
// 使用示例
const data = 'Hello, World!';
const hashed = hashData(data);
console.log('Hashed:', hashed);
JSON Web Token (JWT)
//安装jwt-decode
npm install jwt-decode
// 导入 jwt-decode
import jwt_decode from 'jwt-decode';
// 解析 JWT 函数
function decodeToken(token) {
const decoded = jwt_decode(token);
return decoded;
}
// 使用示例
const token = 'your-jwt-token';
const decoded = decodeToken(token);
console.log('Decoded:', decoded);
//token一般我们只是用于前端在请求接口的时候作为一个必传参数来对带,其实也是可以解析token的,token中携带者后端生成的信息密令 这个也仅仅作为了解,主要是以对称和非对称加密为主