前端对报文的加密和解密的思考

前端最常见的加密方式就是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中携带者后端生成的信息密令  这个也仅仅作为了解,主要是以对称和非对称加密为主

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值