前端用 RSA 加密时公钥格式不对怎么办?
我在前端用 jsencrypt 做 RSA 加密,后端给的公钥是 PEM 格式的,但直接传进去加密失败了。
试过把公钥头尾的 -----BEGIN PUBLIC KEY----- 和 -----END PUBLIC KEY----- 去掉,还是不行,控制台报错说“Invalid PEM formatted message”。
后端说是标准的 PKCS#8 公钥,我该怎么处理才能让 jsencrypt 正确识别?
const encrypt = new JSEncrypt();
encrypt.setPublicKey(publicKey); // 这里 publicKey 是后端给的完整 PEM 字符串
const encrypted = encrypt.encrypt('test');
-----BEGIN PUBLIC KEY-----开头,而不是-----BEGIN RSA PUBLIC KEY-----。推荐的做法是确保公钥字符串完整包含头尾标记,并且换行符要正确。可以这样处理:
如果还是报错,可能是换行符问题。试试用
n明确指定换行:const publicKey = "-----BEGIN PUBLIC KEY-----nMIIBIj...n-----END PUBLIC KEY-----"实在不行就检查下公钥内容是否完整,有时后端传过来的公钥可能被截断。我之前就遇到过因为一个空格导致的加密失败,排查了半天想打人...
另外jsencrypt的文档里明确说了需要完整的PEM格式,包括头尾标记。所以千万别手贱去掉那些标记,它们其实很重要。