【问题标题】:PKCS11 Mechanisms difference + JAVAPKCS11 机制区别+JAVA
【发布时间】: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


    【解决方案1】:

    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()

    【讨论】:

    • 好的,非常感谢您的回答。当然可以,但是今天我认识到我需要在进行加密操作之前添加填充,这意味着添加了填充的纯文本。我试图用谷歌搜索它,但我发现的所有结果都是关于所有加密操作的。
    • 好的,终于找到了!如果它对某人有帮助 - 我找到了 java 类 - RSAPadding 类,可用于从纯文本生成填充文本。我发现的唯一问题是方法 pad(byte[]) 生成带有前导 0 的填充文本,在我的情况下应该修剪。
    猜你喜欢
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 2013-09-20
    • 2017-04-12
    • 2011-11-04
    • 1970-01-01
    相关资源
    最近更新 更多