接口请求需要进行参数rsa加密,如何实现?
条件
public key公钥- npm 包
npm install jsencrypt
实现
- 公钥获取方法以及参数加密方法
// 公钥获取
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
}
- 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);
}
);
这样就可以在每一次请求的时候获到最新的公钥,并对参数加密。这里只对值进行了加密