【问题标题】:Java equivalent to 'openssl rsautl -verify -out'Java 等效于“openssl rsautl -verify -out”
【发布时间】:2023-04-06 18:26:01
【问题描述】:

我有一些数据已使用如下方式签名:

openssl rsautl -sign -in file -inkey PrivateKey.pem -out sig

然后可以使用以下方法恢复签名的数据:

openssl rsautl -pubin -inkey PublicKey.pem -verify -in sig -out file

我已将公钥转换为 Java PublicKey 对象,并考虑将其与 java.security 中的 Signature 类一起使用,但似乎没有允许恢复原始签名数据的方法。

有没有办法使用 Java 恢复签名数据?

【问题讨论】:

  • @DenisS.+ RSA 签名/验证与加密/解密不同;这在 crypto.SX 和 security.SX 上反复讨论。但是由于最初误导人们的数学对称性,Java(AFAICT 未记录)允许 SunJCE Cipher.getInstance("RSA") 成为 .init(DECRYPT_MODE, RSAPublicKey),然后执行此处所需的部分 PKCS1v1.5“恢复”操作。 (openssl rsautl执行标准 RSASSA-PKCS1v1_5 所需的 ASN.1 编码/解码;openssl pkeyutl (RSAkey) -pkeyopt digest:$digopenssl dgst -sign/verify (RSA) 可以。请参阅许多现有的 Q。)

标签: java openssl rsa digital-signature


【解决方案1】:

正如 dave_thompson_085 的评论中所建议的,可以使用以下方法来恢复数据:

Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, publicKey);

byte[] extractedBytes = cipher.doFinal(sig);

【讨论】:

    猜你喜欢
    • 2022-01-27
    • 1970-01-01
    • 2019-09-24
    • 2015-12-07
    • 2016-12-29
    • 2012-06-28
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多