如何验证plainText的Hash而不是plainText本身

时间:2012-04-26 12:03:51

标签: java digital-signature sha1

我正在尝试在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中验证plainText的散列而不是plainText本身(在.NET中可能)?这样可以确保在验证过程开始时输入相同的输入。

问题2

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

0 个答案:

没有答案