2

我正在使用 PKCS11 机制实现功能 - CKM_RSA_PKCS 和 CKM_RSA_X_509。我知道两者都是在 Botan C++ 库中实现的,但我必须在 Java 中找到等价物。第二个问题是两者之间有什么区别?

4

1 回答 1

4

CKM_RSA_PKCS指用于 RSA 加密和数字签名的 PKCS#1 v1.5 标准(参见RFC3447 )。在 Java JCE 中,它通常是 RSA 的默认选择。

  • 对于数字签名,将"MD5WithRSA""SHA1WithRSA"等传递给Signature.getInstance()
  • 对于加密,将“RSA/None/PKCS1Padding”传递给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().

于 2013-02-22T18:14:50.743 回答