如何通过 java 实现 openssl pkeyutl -sign
how can realize openssl pkeyutl -sign by java
命令行是
openssl pkeyutl -sign -inkey pkcs1.pem -pkeyopt digest:sha1 -in testlog
我想通过java实现。
但是 NONEwithRSA 或 SHA1withRSA 都不会给出相同的输出。
NONEwithRSA 的输出与
相同
openssl pkeyutl -sign -inkey pkcs1.pem -in testlog
没有-pkeyopt digest:sha1
java 代码就像
Signature sign = Signature.getInstance(algorithm);
sign.initSign(privatekey);
sign.update(keyByte);
return sign.sign();
不知道怎么修改。
非常感谢
我真正想做的是通过Java
实现C函数
RSA_sign(NID_sha1, token, token_size, sig, &len, key->rsa)
哪个不散列明文
openssl pkeyutl -sign
使用 RSA 私钥和 -pkeyopt digest:$alg
执行 EMSA-PKCS1-v1_5 的第 2-5 步加上私有 modexp(即 8.2.1 第 2 步使用来自 5.2.1 的 RSASP1) ;没有那个 -pkeyopt
它不会执行步骤 2,该步骤将哈希值编码为简单的 ASN.1 结构。
Java Signature
算法包含像 SHA1withRSA
这样的散列,执行 所有 步骤 EMSA-PKCS1-v1_5 加上 modexp,而该方案 NONEwithRSA
仅执行步骤 3-5 加上 modexp,这些都不符合您的要求。如果您无法提供让 Signature
进行散列的数据,您将需要 自己执行第 2 步 和 然后 NONEwithRSA
。虽然 ASN.1 编码通常可能很复杂(解码更是如此),但这种情况可以简单地 通过将完全由哈希算法确定的前缀连接到哈希值 来完成;请参阅第 47 页的注释 1。
Meta:关于 openssl rsautl
、pkeyutl
有和没有的 RSA v1_5 签名之间的差异,有 很多 个问题-pkeyopt digest
或 dgst -sign
和 Java 等其他系统,都与包含或不包含 ASN.1 编码步骤的问题有关(其中许多比 rfc8017 更早!)但是我找不到任何适合这个问题的东西。
命令行是
openssl pkeyutl -sign -inkey pkcs1.pem -pkeyopt digest:sha1 -in testlog
我想通过java实现。 但是 NONEwithRSA 或 SHA1withRSA 都不会给出相同的输出。 NONEwithRSA 的输出与
相同openssl pkeyutl -sign -inkey pkcs1.pem -in testlog
没有-pkeyopt digest:sha1
java 代码就像
Signature sign = Signature.getInstance(algorithm);
sign.initSign(privatekey);
sign.update(keyByte);
return sign.sign();
不知道怎么修改。
非常感谢
我真正想做的是通过Java
实现C函数RSA_sign(NID_sha1, token, token_size, sig, &len, key->rsa)
哪个不散列明文
openssl pkeyutl -sign
使用 RSA 私钥和 -pkeyopt digest:$alg
执行 EMSA-PKCS1-v1_5 的第 2-5 步加上私有 modexp(即 8.2.1 第 2 步使用来自 5.2.1 的 RSASP1) ;没有那个 -pkeyopt
它不会执行步骤 2,该步骤将哈希值编码为简单的 ASN.1 结构。
Java Signature
算法包含像 SHA1withRSA
这样的散列,执行 所有 步骤 EMSA-PKCS1-v1_5 加上 modexp,而该方案 NONEwithRSA
仅执行步骤 3-5 加上 modexp,这些都不符合您的要求。如果您无法提供让 Signature
进行散列的数据,您将需要 自己执行第 2 步 和 然后 NONEwithRSA
。虽然 ASN.1 编码通常可能很复杂(解码更是如此),但这种情况可以简单地 通过将完全由哈希算法确定的前缀连接到哈希值 来完成;请参阅第 47 页的注释 1。
Meta:关于 openssl rsautl
、pkeyutl
有和没有的 RSA v1_5 签名之间的差异,有 很多 个问题-pkeyopt digest
或 dgst -sign
和 Java 等其他系统,都与包含或不包含 ASN.1 编码步骤的问题有关(其中许多比 rfc8017 更早!)但是我找不到任何适合这个问题的东西。