前端用公钥加密数据后端却解密失败,是哪里出错了?
我在 React 项目里尝试用 jsencrypt 做公钥加密,把密码传给后端,但后端(Java)一直报解密失败。我确认公钥是匹配的,也试过 Base64 编码,但还是不行。
下面是我加密的代码:
import JSEncrypt from 'jsencrypt';
const encryptData = (data) => {
const publicKey = <code>-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC...
-----END PUBLIC KEY-----</code>;
const encrypt = new JSEncrypt();
encrypt.setPublicKey(publicKey);
return encrypt.encrypt(data); // 返回的是 Base64 字符串
};
// 调用示例
const encryptedPwd = encryptData('mySecret123');
console.log(encryptedPwd); // 传给后端
后端说密文格式不对,难道是换行符或者 PKCS#1/PKCS#8 的问题?
转换方法:把公钥开头的
-----BEGIN PUBLIC KEY-----改成-----BEGIN RSA PUBLIC KEY-----,结尾同理,再把Base64内容按64字符换行,就行了。或者直接让后端给一个PKCS#1格式的公钥。