技术:jsencrypt.js
这个前端库有一个特点:公钥加密、私钥解密,没有公钥解密(只能前端公钥加密后台私钥解密)
开发中遇到的问题:后端使用私钥加密,前端需要使用公钥进行解密,返回的结果为false?
解决办法:实现双向加密,就是使用两套秘钥。
后端有两对秘钥:privateKeyA,publicKeyA,privateKeyB,publicKeyB(privateKey:私钥 publicKey:公钥)
后端拿着:privateKeyA,publicKeyB
前端拿着:publicKeyA,privateKeyB
前端加密时用publicKeyA,后端用privateKeyA解密
后端加密时用publicKeyB,前端用privateKeyB解密
这样就能保证,虽然私钥和公钥都在前端代码中,但是这两个并不是一对,就算是全部拿到,也无法成功解密。
前端代码:
/**
* RSA解密
*/
decryptRSA:str=>{
let encryptor = new JSEncrypt(); // 新建JSEncrypt对象
let privateKey = "privateKeyB";//后台提供
encryptor.setPrivateKey(privateKey);//设置私钥
let decrytStr = encryptor.decrypt(str);
return decrytStr
},
/**
* RSA加密
*/
encryptRSA:str=>{
let encryptor = new JSEncrypt(); // 新建JSEncrypt对象
let publicKey = "publicKeyA"; //后台提供
encryptor.setPublicKey(publicKey); // 设置公钥
let rsaPassWord = encryptor.encrypt(str);
return rsaPassWord;
},
网友评论