繁体   English   中英

使用javax.crypto.Cipher和java.security.Signature进行签名

[英]Signing with javax.crypto.Cipher vs java.security.Signature

我正在处理一些需要更新以使用另一个加密提供程序的旧代码。 我不是Java专家。 我试图了解使用javax.crypto.Cipherjava.security.Signature签署哈希之间的区别。

现有代码看起来类似于:

  Cipher cipher = Cipher.getInstance(CFG_ALGO);
  cipher.init(Cipher.DECRYPT_MODE, privateKey);
  byte[] signature = cipher.doFinal(payload);

我收到的使用新提供程序的示例代码如下所示:

  final Signature sign = Signature.getInstance("RSA", SIGNATURE_PROVIDER);
  sign.initSign(keystore.getPrivateKey(keyName, keyPass));
  sign.update(data);
  byte[] signature = sign.sign();

如果我将两者使用相同的提供者,两者之间是否有任何区别? 一种方式通常优于另一种方式吗?

Cipher用于加密和解密; Signature用于签名和验证。

在某些情况下Cipher也可用于签名上下文的唯一原因是某些签名方案通过使用私钥加密指纹来工作,以便其他可访问相应公钥的人可以解密数据并进行验证。

然而, 并非所有签署方案都是如此,例如DSA和ECDSA完全不同。

因此,即使您当前仅使用RSA签名,也应使用Signature以便以后维护。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM