RSA / ECB / OAEPWithSHA-256AndMGF1Padding但MGF1使用SHA-256?

我在Oracle的Java标准加密提供程序中找到了困难的方法

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

使用与SHA-1相关的MFG1; SHA-256仅用于散列标签(实际上是空的)。 我发现在MFG1中实际使用SHA-256的唯一解决方案(通过答案和评论帮助)使用了另一种forms的Cipher.init

 cipher.init(Cipher.DECRYPT_MODE, privKey, new OAEPParameterSpec( "SHA-256", "MGF1", MGF1ParameterSpec.SHA256, PSource.PSpecified.DEFAULT )); 

问题: Cipher.getInstance是否会识别转换 ,效果类似于"RSA/ECB/OAEPWithSHA-256AndMGF1Padding" ,但MGF1使用SHA-256除外?

不,没有。

Java是开源的。 如果不确定,您可以查看OpenJDK的来源。

com.sun.crypto.provider.RSACipherinit方法中,它读取:

  spec = new OAEPParameterSpec(oaepHashAlgorithm, "MGF1", MGF1ParameterSpec.SHA1, PSource.PSpecified.DEFAULT); 

我已经检查了OpenJDK的Java 8更新60。 如您所见,您需要使用算法参数。