gpt4 book ai didi

java - 如何使 "MessageDigest SHA-1 and Signature NONEwithRSA"等同于 "Signature SHA1withRSA "

转载 作者:搜寻专家 更新时间:2023-11-01 02:45:38 25 4
gpt4 key购买 nike

我有兴趣将带有 RSA 签名的 SHA-1 散列应用于某些数据,但我需要分两步进行 - 首先应用散列,然后对数据进行签名。 Signature.sign() 函数似乎创建了一个更复杂的(ASN.1?)最终签名的数据结构(参见 this question )。如何在不使用任何外部库(如 BouncyCaSTLe)的情况下使两者等效?

应用哈希并使用签名单步签名:

PrivateKey privatekey = (PrivateKey) keyStore.getKey(alias, null);
...
sig = Signature.getInstance("SHA1withRSA", "SunMSCAPI");
sig.initSign(privatekey);
sig.update(data_to_sign);
byte[] bSignedData_CAPISHA1_CAPIRSA = sig.sign();

通过 MessageDigest 应用哈希,然后使用 Signature 签名:

PrivateKey privatekey = (PrivateKey) keyStore.getKey(alias, null);
...
MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
byte[] data_to_sign = sha1.digest(bdataToSign);
Signature sig = Signature.getInstance("NONEwithRSA", "SunMSCAPI");
sig.initSign(privatekey);
sig.update(data_to_sign);
byte[] bSignedData_JAVASHA1_CAPIRSA = sig.sign();
...

我正在寻找以下等效项:

bSignedData_JAVASHA1_CAPIRSA == bSignedData_CAPISHA1_CAPIRSA

我的最终目标是创建哈希,然后使用 PKCS11 token 进行签名,但我要求签名数据的格式与遗留数据的格式相同,以便进行验证。

最佳答案

我能够通过执行以下操作解决此问题:

  1. 要签名的数据需要正确格式化DigestInfo DER 编码的字节数组。签名 SHA1withRSA 采用为你处理这个,但如果你想分两步完成过程中,您需要创建自己的 DigestInfo。我最终复制了极少量的 ASN.1 类从 BouncyCaSTLe 到我的项目来完成这个,尽管我不想使用第三个党库。

  2. 如果您尝试使用 Cipher API 来加密 DigestInfo,则PKCS1 填充将是随机的,不适用于数字签名。我需要静态填充。

  3. Signature.getInstance("NONEwithRSA", "SunMSCAPI") 拒绝DER 编码的 DigestInfo 格式,如果你尝试将返回一个错误签署该数据。但是,因为我最终想使用 PKCS11生成签名的 API,我最终签署了 DER 编码具有 PKCS11 C_SignInit 和 C_Sign 函数的 DigestInfo。

总而言之,对我有用的是:

  1. 使用 Java MessageDigest API 生成要签名的数据的 SHA-1 哈希
  2. 生成了一个 DigestInfo DER 编码的 ASN.1 对象,对象中嵌入了 SHA-1 散列和 SHA-1 OID。
  3. 使用来自第三方库的 PKCS11 C_Sign 函数签署 DigestInfo。

以下链接对解决我的问题最有帮助:

Oracle Forums: SHA1withRSA - how to do that in 2 steps?

StackOverflow: Using SHA1 and RSA with java.security.Signature vs. MessageDigest and Cipher

关于java - 如何使 "MessageDigest SHA-1 and Signature NONEwithRSA"等同于 "Signature SHA1withRSA ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22840322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com