前端用公钥加密数据后端却解密失败,是哪里出错了?

西门树萱 阅读 45

我在 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 的问题?

我来解答 赞 4 收藏
二维码
手机扫码查看
1 条解答
宇文琬晴
公钥格式问题。JSEncrypt用的是PKCS#1格式,但Java通常用PKCS#8。你需要把后端的PKCS#8公钥转成PKCS#1格式给JSEncrypt用。

转换方法:把公钥开头的 -----BEGIN PUBLIC KEY----- 改成 -----BEGIN RSA PUBLIC KEY-----,结尾同理,再把Base64内容按64字符换行,就行了。

或者直接让后端给一个PKCS#1格式的公钥。
点赞
2026-03-19 11:11