前端参数RSA加密

83 阅读1分钟

接口请求需要进行参数rsa加密,如何实现?

条件

  1. public key 公钥
  2. npm 包
npm install jsencrypt

实现

  1. 公钥获取方法以及参数加密方法
// 公钥获取
const getPublicKey = () => {
// 这里是从后端获取的公钥,或者是写到本地的公钥文本
// .......
}

//参数加密方法
const  paramsEncryp = (params,publickey) => {
    // 创建JSEncrypt实例
    const encrypt = new JSEncrypt();
    // 设置公钥
    encrypt.setPublicKey(publicKey);
    // 创建一个新的对象来保存加密后的参数
    let params = {}
    Object.keys(params).map(key => {
        // 获取参数值
        const value = params[key];
        // 将加密后的值保存到新的对象中
        params[key] = encrypt.encrypt(JSON.stringify(value))
    })    
    return params
}
  1. axios中参数加密
const publicKey = getPublicKey() // 获取公钥
// 在请求拦截器中处理
api.interceptors.request.use(
  async config => {
    try {
      // 获取公钥
      const publicKey = await getPublicKey(); //此前声明的方法
      const params = paramsEncryp(config.data, publicKey) //此前声明的方法
      // 用加密后的数据替换原始数据
      config.data = params
      return config;
    } catch (error) {
      return Promise.reject(error);
    }
  },
  error => {
    return Promise.reject(error);
  }
);

这样就可以在每一次请求的时候获到最新的公钥,并对参数加密。这里只对值进行了加密