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