微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用 JavaScript 解密 RSA

如何解决用 JavaScript 解密 RSA

我正在编写一个 Web 应用程序,它从服务器接收 RSA 加密响应。它需要解密这个文件

到目前为止,我已经尝试在前端使用 JSEncrypt 来解密文件。问题似乎是后端没有正确加密文件。如果我把私钥和公钥都放在前端,我就可以成功加密和解密。问题似乎是我加密响应的方式。当我在 nodeJS 中读入文件并使用以下代码加密文件时:

fs.readFile("rsaPublicKey","utf8",(err,data) => {
  if (err) throw err;

  pubKey = data;
});
encryptedMessage = crypto.publicEncrypt(
  {
    key: pubKey,padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,oaepHash: "sha256",},Buffer.from(message)
);

res.send({"response": encryptedMessage.toString("base64")});

该消息比使用 JSEncrypt 加密的相同消息要大。

Node.JS 消息:WLptALzMMws/Qj8qzeYkQ1NyRknoBGX0+oHmtzd0Cwl/RmWnwt6wSJ1qdbk5GMPcEML5iqCISqTfPTSEC6M37KIJAgGLViPENKcvonT7qQbMsn0yftFMl9grn1oLQz567t3lWpdyuCa99xqG+tGsAAOK84HHCW+nprSH6+7olysTnSzzZWvvBl6VGTpmwtoBEGOnZ5C/XLwiW7b2UuzHsksIA1s55OkJMOOUA6neZiJIzHsJSHZGgigKvKwYNQbjhmEBbdNVSvCPIE/d9dpTtWNABcnQX7SCA6/sTZH/f0OnGGXOyYabhq84fdw/WwpouUBWsRQLQYJgKy3EqY/y/w==

JSEncrypt 消息: Sq9KQyp7KDqy1CBFRLtXm4ZAdxidgUNlp0d6X6xm3m+aBXKv4H7DVu0O40EMWeSWl3dQcBBC/oguJsoAz/GY//77ElIPIRuvPK4YIWPNq2fjoIgIs3Ew4I5TKAP4rph//NSlDLPc4ppxQjj/YO2238EHney9Wxxa9EZzE/p48arkxuEjB0gakWyVgTlF8x6H7LGsD4epS7RWJ0ua1kG1J6ZuMB82qBvq2MugLEuQamAfml4LtwWYFTJ/dIcAqVqrtHe6/F2oNGwXsE2GDEeZcFr4vTkejCs5dFcbbcgg/KVnROdGQHJlDGl0uUBy/2UNml3cT3FocjXkPGJa0zu3/g==

有什么办法可以尝试让它工作吗?

解决方法

事实证明 JSEncrypt 不支持我在后端使用的填充。如 Topaco 在评论中所示,我将后端的填充更改为 crypto.constants.RSA_PKCS1_PADDING。另一种可能的选择是使用 https://github.com/michaeldisaro/JSEncrypt 并再次使用 OAEP 填充。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。