我正在使用PKCS11机制实现功能 - CKM_RSA_PKCS和CKM_RSA_X_509。我知道两者都是在Botan C ++库中实现的,但我必须找到Java中的等价物。第二个问题是两者之间的区别是什么?
答案 0 :(得分:4)
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 /无/ OAEPWithSHA1AndMGF1Padding”传递给Cipher.getInstance()
。