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

fgr*_*ieu 7 java cryptography

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

Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
Run Code Online (Sandbox Code Playgroud)

使用以SHA-1实例化的MFG1;SHA-256仅用于对标签进行哈希处理(实际上是空的)。我发现在MFG1中实际使用SHA-256的唯一解决方案(得到该答案注释的帮助)是使用以下替代形式Cipher.init

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

问:有没有转变Cipher.getInstance会认识到,与类似的效果"RSA/ECB/OAEPWithSHA-256AndMGF1Padding",除了与MGF1使用SHA-256?

Maa*_*wes 7

不,没有。

Java是开源的。如果不确定,则可以查看OpenJDK的源代码。

在它的init方法中com.sun.crypto.provider.RSACipher读取:

            spec = new OAEPParameterSpec(oaepHashAlgorithm, "MGF1",
                MGF1ParameterSpec.SHA1, PSource.PSpecified.DEFAULT);
Run Code Online (Sandbox Code Playgroud)

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

  • 我同意这一点,这也阻碍了使用SHA-256的RSA / PKCS1或OAEP的替换。已经有更多这样的疏忽,例如AES没有`SecretKeyFactory`,而与例如HSM一起使用则是必需的。GCM也未得到适当处理。仍然是最好的API之一。 (2认同)