技術(shù):jsencrypt.js
這個(gè)前端庫(kù)有一個(gè)特點(diǎn):公鑰加密、私鑰解密,沒(méi)有公鑰解密(只能前端公鑰加密后臺(tái)私鑰解密)
開(kāi)發(fā)中遇到的問(wèn)題:后端使用私鑰加密,前端需要使用公鑰進(jìn)行解密,返回的結(jié)果為false?
解決辦法:實(shí)現(xiàn)雙向加密,就是使用兩套秘鑰。
后端有兩對(duì)秘鑰:privateKeyA,publicKeyA,privateKeyB,publicKeyB(privateKey:私鑰 publicKey:公鑰)
后端拿著:privateKeyA,publicKeyB
前端拿著:publicKeyA,privateKeyB
前端加密時(shí)用publicKeyA,后端用privateKeyA解密
后端加密時(shí)用publicKeyB,前端用privateKeyB解密
這樣就能保證,雖然私鑰和公鑰都在前端代碼中,但是這兩個(gè)并不是一對(duì),就算是全部拿到,也無(wú)法成功解密。
前端代碼:
/**
* RSA解密
*/
decryptRSA:str=>{
let encryptor = new JSEncrypt(); // 新建JSEncrypt對(duì)象
let privateKey = "privateKeyB";//后臺(tái)提供
encryptor.setPrivateKey(privateKey);//設(shè)置私鑰
let decrytStr = encryptor.decrypt(str);
return decrytStr
},
/**
* RSA加密
*/
encryptRSA:str=>{
let encryptor = new JSEncrypt(); // 新建JSEncrypt對(duì)象
let publicKey = "publicKeyA"; //后臺(tái)提供
encryptor.setPublicKey(publicKey); // 設(shè)置公鑰
let rsaPassWord = encryptor.encrypt(str);
return rsaPassWord;
},