java - javax.crypto.Cipher 为 RSA 使用了哪个填充

标签 java security cryptography rsa padding-oracle-attack

我需要通过 RSA 解密消息以便通过不安全的 channel 发送消息,但我担心 Padding Oracle Attack .因此我已经提出了以下问题:

  1. How to verify the integrity of RSA encrypted messages?
  2. 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 Oracle Attack 的攻击 OAEP不是(假设它已正确实现)

因此我想知道 Java 7 的 javax.crypt.Cipher 使用了哪个填充实现

最佳答案

这取决于选择的或默认的提供程序,当您实例化密码而不完全限定它时实际使用哪个填充,例如:

Cipher.getInstance("RSA")

这样做是一种不好的做法,因为如果您切换 Java 实现,可能会有不同的默认值,突然之间,您将不再与旧的密文兼容。 始终完全限定密码。

如我之前所说,默认值可能(有很多提供商,但不能确定)是 PKCS#1 v1.5 填充。如果您需要另一个,则必须指定它。如果您想使用 OAEP,这里是来自 here 的完全限定密码字符串:

Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");

关于java - javax.crypto.Cipher 为 RSA 使用了哪个填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32033804/

相关文章:

java - 如何从 JOOQ 3.11 中的 JSONB 转换

java - java中的数组,带有随机数

linux - 在类似 Linux/UNIX 的纯文本文件中隐藏网络代理密码

php - 为什么 Php pbkdf2 输出与 golang 不同?

c - RSA 加密的 OpenSSL 可变长度结果 [C 编程]

performance - 为什么整数分解是非多项式时间?

java - 通过 JDBC Driver Manager 运行 mysql 准备好的语句(慢于 10 秒)时,Tomcat 6 没有得到任何响应

java - 不使用 "clone"复制堆栈或队列

ruby-on-rails - 我的脚本会发送很多请求吗?

MySQL 版本 : 5. 5.36 易受攻击?