【问题标题】:error:0409A06E:rsa routines data too large for key size错误:0409A06E:rsa 例程数据对于密钥大小来说太大
【发布时间】:2020-03-03 12:36:04
【问题描述】:

我正在生成一个 SAML 响应,它需要使用公钥和私钥进行加密和签名。我使用命令在终端中生成了private.pempublic.pem

openssl genrsa -out private.pem 2048
openssl rsa -in ./private.pem -pubout -out public.pem

然后在 nodeJS 中。

encrypt: function(message) {
    return new Promise(function (resolve, reject) {
        var publicKey = require("fs").readFileSync(__dirname + "/public.pem", "utf8");
        var encrypted = require("crypto").publicEncrypt(publicKey, new Buffer(message));
        resolve(encrypted.toString("base64"));
    });
},

一旦我调用消息encrypt(xml),我就会收到以下错误

{
  library: 'rsa routines',
  function: 'RSA_padding_add_PKCS1_OAEP_mgf1',
  reason: 'data too large for key size',
  code: 'ERR_OSSL_RSA_DATA_TOO_LARGE_FOR_KEY_SIZE'
}

目标

我必须按照此处的演示 samltools.com 签署消息(模式:SignMessage),我的 SAML 消息看起来像 this。 (参见 SAML 响应部分)。

  1. 签署消息
  2. Base64Encode 消息

【问题讨论】:

  • 你想做什么还不清楚。您的演示链接仅谈论签名,而不是加密。然而,您将“加密消息”作为您的首要目标。
  • 对不起,给消息签名,现在我了解了更多,它正在签名,我将删除加密部分

标签: node.js cryptography saml


【解决方案1】:

这里的问题是你不能直接用RSA加密,这是一条大于密钥大小的数据。

我很惊讶,我也很惊讶。

实际上,很少有有效载荷数据直接使用 RSA 甚至椭圆曲线进行加密。

您应该使用 RSA Diffie-Hellman 来生成共享密钥。

文件的签名,实际上是文件哈希的签名。

【讨论】:

  • 能否请教一下代码,我对加密知之甚少
猜你喜欢
  • 2019-08-04
  • 1970-01-01
  • 2012-04-11
  • 2016-03-11
  • 2020-10-02
  • 1970-01-01
  • 2022-12-20
  • 2013-06-07
  • 2015-07-28
相关资源
最近更新 更多