【问题标题】:RSA in bouncycastle for java - How is ciphertext randomization gained?RSA in bouncycastle for java - 如何获得密文随机化?
【发布时间】:2011-05-19 06:22:33
【问题描述】:

我正在为我的应用程序 RSA 加密使用 bouncycastle 库。 我的问题是:当我使用相同的密钥对一个明文进行两次加密时,它会导致两个不同的密文,所以在 bouncycastles 实现中必须有某种随机化(RSA 本身不是随机的,所以 enc(a, k)总是一样的)。

谁能告诉我,这是怎么做到的?我发现了一些关于加密致盲的信息,但对我来说,我似乎必须为此使用一些致盲引擎。

这里是我的源代码:

private byte[] encRSA(byte[] in, java.security.PublicKey publicKey) {
    try {
        Cipher rsaCipher = Cipher.getInstance("RSA/NONE/PKCS1Padding", "BC");
        rsaCipher.init(Cipher.ENCRYPT_MODE, publicKey);
        rsaCipher.update(in);
        return rsaCipher.doFinal();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

谁能帮帮我?

谢谢!!!

【问题讨论】:

    标签: java cryptography rsa bouncycastle


    【解决方案1】:

    RSA 输出不是随机的,但 PKCS1Padding 是随机的,每次都会导致不同的输出。请参阅RFC 3218 了解更多信息。

    实际上需要随机填充来应对攻击,攻击者可能会尝试通过加密一条消息并与他截获的加密输出进行比较来猜测消息。

    【讨论】:

    • 如果PKCSI密文是通过网络发送的,我们需要在发送前对密文进行编码吗?
    • 如果您的传输层不是二进制安全的,是的,在这种情况下通常使用 base64 编码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多