我需要通过RSA解密消息,以便通过不安全的通道发送消息,但我害怕
Padding Oracle Attack.因此我已经问过以下问题:
> How to verify the integrity of RSA encrypted messages?
> How to ensure message integrity for RSA ciphers by using javax.crypto.Cipher
像第一个问题中建议的那样,
However,since you are using a high level cryptographic library,this is something you shouldn’t have to worry about. The writers of that library should have taken care of it.
我不应该考虑.据我所知,PKCS#1 v1.5的RSA实现容易受到Padding Oracale攻击,因此OAEP不是(假设它已正确实现)
因此,我想知道Java 7的javax.crypt.Cipher使用了哪个填充实现
解决方法
它取决于所选择的或默认的提供程序,当您实例化一个密码而没有完全限定它时,实际使用哪个填充:
Cipher.getInstance("RSA")
这样做是一种不好的做法,因为如果你切换Java实现,可能会有不同的默认值,突然间,你将不再与旧的密文兼容.始终完全符合密码.
正如我之前所说,默认可能(有许多提供商,一个不能确定)是PKCS#1 v1.5填充.如果您需要另一个,则必须指定它.如果您想使用OAEP,这里是一个来自here的完全限定的密码字符串:
Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");