【发布时间】:2013-02-21 13:11:20
【问题描述】:
我正在使用 PKCS11 机制实现功能 - CKM_RSA_PKCS 和 CKM_RSA_X_509。我知道两者都是在 Botan C++ 库中实现的,但我必须在 Java 中找到等价物。第二个问题是两者有什么区别?
【问题讨论】:
标签: java digital-signature public-key-encryption pkcs#11
我正在使用 PKCS11 机制实现功能 - CKM_RSA_PKCS 和 CKM_RSA_X_509。我知道两者都是在 Botan C++ 库中实现的,但我必须在 Java 中找到等价物。第二个问题是两者有什么区别?
【问题讨论】:
标签: java digital-signature public-key-encryption pkcs#11
CKM_RSA_PKCS 指的是用于 RSA 加密和数字签名的 PKCS#1 v1.5 标准(请参阅RFC3447)。在 Java JCE 中,它通常是 RSA 的默认选择。
Signature.getInstance()
Cipher.getInstance()。CKM_RSA_X_509 指的是教科书(或原始)RSA 算法,即没有定义填充的算法。在这种情况下,您可以简单地将 "RSA/None/NoPadding" 传递给 Cipher.getInstance()。签名可以解密,验证可以加密(后跟比较)。
我会避免实施和使用原始 RSA,除非您有特定的用例。 PKCS#1v 1.5 签名更安全。不过,对于加密,我实际上不建议使用它们中的任何一个,因为它们都不安全。最好只依赖 PKCS#1 OAEP (CKM_RSA_PKCS_OAEP);为此,您将 "RSA/None/OAEPWithSHA1AndMGF1Padding" 传递给 Cipher.getInstance()。
【讨论】: