【问题标题】:Java's RSA/ECB/OAEPWithSHA-256AndMGF1Padding equivalent in Node.jsNode.js 中 Java 的 RSA/ECB/OAEPWithSHA-256AndMGF1Padding 等效项
【发布时间】:2018-12-18 14:10:41
【问题描述】:

数据解密将使用RSA/ECB/OAEPWithSHA-256AndMGF1Padding算法在JAVA中运行。所以我必须使用等效于node.js 中的RSA/ECB/OAEPWithSHA-256AndMGF1Padding 的算法使用公钥加密数据。

我尝试了crypto.publicEncrypt(key, buffer),它使用了与上述算法不相似的crypto.constants.RSA_PKCS1_OAEP_PADDING。 所以我需要等效于“RSA/ECB/OAEPWithSHA-256AndMGF1Padding”的算法或如何在node.js中实现相同的算法

【问题讨论】:

  • 你的问题是什么?
  • 我没有找到任何关于节点用于 OAEP 的哈希函数的文档。这意味着它 1) 可能将 SHA1 用于 MGF1 哈希和常量哈希,并且 2) 无法更改它。您必须修改您的 Java 才能使用 SHA1。
  • @JamesKPolk+ 根据stackoverflow.com/questions/35544547/…stackoverflow.com/questions/33532091/… node-forge(而不是 node-crypto)可以选择 OAEP 哈希。 OP:您在 Java 中使用什么提供程序,或者您使用的是OAEPParameterSpec? IIRC Suncle/Open 提供者和 BouncyCastle 提供者默认 'MGF1with$hash' 不同。
  • @dave_thompson_085:谢谢,这是很好的信息。在this 的回答中,我的结论是,Bouncycastle 使用转换字符串中指定的哈希算法作为两个哈希值,而 Suncle 使用指定的哈希值作为常量,并始终使用 SHA1 作为 MGF1 哈希值。

标签: java node.js encryption cryptojs


【解决方案1】:

我终于找到了答案。 等效于“RSA/ECB/OAEPWithSHA-256AndMGF1Padding”可以通过 node-forge npm 模块实现。 https://www.npmjs.com/package/node-forge#rsa

    // encrypt data with a public key using RSAES-OAEP/SHA-256/MGF1-SHA-1
// compatible with Java's RSA/ECB/OAEPWithSHA-256AndMGF1Padding
var encrypted = publicKey.encrypt(bytes, 'RSA-OAEP', {
  md: forge.md.sha256.create(),
  mgf1: {
    md: forge.md.sha256.create()
  }
});

谢谢

【讨论】:

  • 谢谢!!。对于RSA/ECB/OAEPWithSHA-1AndMGF1Padding,我在没有mdmgf1 的情况下尝试了它,它可以工作!。
  • 这里不是有错字吗? mgf1md 不应该是 forge.md.sha1.create() 以适应上面的评论吗?
【解决方案2】:

首先,您不应该使用“ECB”模式密码,因为:

  1. ECB 是一种分组密码模式,RSA 不是基于该操作模式的算法。
  2. 如果您使用基于该操作模式的算法(例如 AES),则不应使用 ECB,因为它没有 IV(初始化向量),因此不安全,并且密码分析器可能会破解密码.如果您想与外部系统共享敏感信息并防止 Oracle Padding,您可以使用 CBC,它有 IV 或 GCM。我建议您访问以下链接:

MSC61-J. Do not use insecure or weak cryptographic algorithms

因此,在这种情况下,您只需使用 OAEP 进行 RSA 加密,因为它是一种填充方案,它有助于防止 Oracle Padding 用于不对称算法,然后将您的代码更改为:RSA/None/OAEPWithSHA-256AndMGF1Padding。也许,您可以获得与 Node.js 的兼容性。另外,我建议您访问官方网站:

JCA Reference Guide

希望这些信息对您有所帮助。

祝你好运。

【讨论】:

  • 正如您链接的 JCA 页面(以及它的非过时版本)所说,即使算法不使用 RSA 等模式(如您正确地说),因此 Suncle 提供程序 (SunJCE) 需要“ECB”作为占位符,这实际上意味着“无模式”。 BouncyCastle 允许使用“ECB”或“NONE”(不区分大小写,与 JCA 中的大多数名称一样)。
猜你喜欢
  • 2015-08-31
  • 2015-11-16
  • 1970-01-01
  • 2021-11-16
  • 2020-03-17
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
  • 2015-03-27
相关资源
最近更新 更多