qui*_*inz 2 java cryptography jce digital-signature jca
我正在编写一些旧代码,需要更新它才能使用另一个加密提供商。我不是 Java 专家。我试图了解使用javax.crypto.Cipher和签署哈希值之间有什么区别java.security.Signature。
现有代码类似于:
Cipher cipher = Cipher.getInstance(CFG_ALGO);
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] signature = cipher.doFinal(payload);
Run Code Online (Sandbox Code Playgroud)
我收到的使用新提供程序的示例片段如下所示:
final Signature sign = Signature.getInstance("RSA", SIGNATURE_PROVIDER);
sign.initSign(keystore.getPrivateKey(keyName, keyPass));
sign.update(data);
byte[] signature = sign.sign();
Run Code Online (Sandbox Code Playgroud)
如果我为两者使用相同的提供商,两者之间有什么区别吗?一种方式通常优于另一种方式吗?
Cipher用于加密和解密;Signature用于签名和验证。
在某些情况下Cipher也可以在签名上下文中使用的唯一原因是,某些签名方案通过使用私钥加密指纹来工作,以便其他有权访问相应公钥的人可以解密数据并进行验证。
但并非所有签名方案都是如此,例如 DSA 和 ECDSA 的工作方式完全不同。
因此,即使您当前仅使用 RSA 签名,Signature为了以后的可维护性,您也应该使用。
| 归档时间: |
|
| 查看次数: |
1725 次 |
| 最近记录: |