我正在使用bouncycastle库为我的应用程序RSA加密。 我的问题是:当我使用相同的密钥加密一个明文两次时,它将导致两个不同的密文,因此在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;
}
有人可以帮助我吗?
感谢!!!
答案 0 :(得分:5)
RSA输出不是随机的,但PKCS1Padding每次都会导致不同的输出。有关详细信息,请参阅RFC 3218。
实际上需要随机填充来抵御攻击,攻击者可以通过加密一个消息并与他截取的加密输出进行比较来尝试猜测消息。