【问题标题】:how to do verify using java.security.Signature如何使用 java.security.Signature 进行验证
【发布时间】:2012-03-02 11:03:54
【问题描述】:

我已经有一个密钥对,公共的和私有的。我如何实际使用java.security.Signature 来验证我用其中一个密钥签名的字符串?

编辑:

我有两个键作为字符串。 verify方法,其实是

verify(byte[] signature)

javadoc 说:

verify(byte[] signature) 表示给定的签名是否可以 使用公钥或签名者的证书进行验证。

在调用 verify 方法之前,如何让该签名识别用于该验证的公钥/私钥?换句话说,我如何将我的字符串键变成可以被签名接受的键对象?

【问题讨论】:

  • 该类中有没有一个名为verify的方法?如果是这样,也许您有更具体的问题。

标签: java rsa digital-signature


【解决方案1】:
  1. 使用KeyFactory 将关键规范转换为对象。
  2. 调用Signature.getInstance(algName)获取签名实例。
  3. 使用SignatureinitVerify方法关联一个密钥进行签名验证。
  4. 使用update 提供Signature 字节。
  5. 最后,拨打verify
  6. 利润

来自KeyFactoryjavadoc:

以下是如何使用密钥工厂以通过其编码实例化 DSA 公钥的示例。假设 Alice 收到了 Bob 的数字签名。 Bob 还向她发送了他的公钥(以编码格式)来验证他的签名。 Alice 然后执行以下操作:

X509EncodedKeySpec bobPubKeySpec = new X509EncodedKeySpec(bobEncodedPubKey);
KeyFactory keyFactory = KeyFactory.getInstance("DSA");
PublicKey bobPubKey = keyFactory.generatePublic(bobPubKeySpec);
Signature sig = Signature.getInstance("DSA");
sig.initVerify(bobPubKey);
sig.update(data);
sig.verify(signature);

【讨论】:

  • 感谢您的回复。所以在我的情况下,我会将“DSA”更改为“RSA”,对吗?
  • @sammiwei,我不知道是"RSASSA-PSS"还是适合您情况的算法名称,但您是正确的,因为您需要用正确的名称替换"DSA"该示例中有两个地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多