0

我正在尝试在 Java 中验证带有 RSA 签名的 SHA1。我的代码实际上是这样的:

String plainText = "myString";
String signature_b64_encoded = "bOBrJmPGJ6eqDpk7sZMJZ0QujErTVz/boe44ANTLbeHd1Pm56UBH3uUCdH4sDZcDczIW5E6Q0o2dq/4lpjTAOzu3FjaLMAZ1sSTn8Ds8XxQnOnmhapbrd/6sNSr9fC57c7BlgAy7GZbCZGUQC/b/UETb8cIR0B1Dqk41RDorm+NdwDEVCTl4q9I7D70/Kau/aGpUvJ3ULgzM3/JnxHpaWmG7xAsXH9MyxVSxi/ZpJ0WuyuaAiSmiDN946O/ElIxRqnaEtFuSIDinUYz4yAWtoLdssDO5SqMFb8EskUdfExs1IcGtYRaIbz3ASTFdVQoou7HI4pxVn1Sh4Y4mrxa7Ag==";
Signature instance = Signature.getInstance("SHA1WithRSA");
PublicKey pkey = cert.getPublicKey(); // gets my Public Key
instance.initVerify(pkey);
instance.update(plainText.getBytes());
Boolean blnResult = instance.verify(Base64.decode(strSignature.getBytes("UTF-8"), Base64.DEFAULT));

问题是验证的签名仅在某些情况下为假,而在其他情况下为真。我无法理解这个结果随机性的原因。

  • 我要验证的字符串已在 .NET 环境中签名
  • 在 .NET 中完成的签名验证是在 plainText 的哈希上进行的,而不是在 plainText 上进行的

问题 1

有没有办法在 Java 中验证纯文本的哈希而不是纯文本本身(在 .NET 中可能)?这将允许确保在验证过程开始时具有相同的输入。

问题2

是否有另一种方法可以在 Java 中使用 RSA 签名验证 SHA1?

4

0 回答 0