我在Oracle的Java标准加密提供程序
中找到了困难的方法Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
使用与SHA-1相关的MFG1; SHA-256仅用于散列标签(实际上是空的)。我发现在MFG1中实际使用SHA-256的唯一解决方案(由answer和comment帮助)使用了另一种形式的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除外?
答案 0 :(得分:5)
不,没有。
Java是开源的。如果不确定,您可以查看OpenJDK的来源。
在com.sun.crypto.provider.RSACipher
的init
方法中,它显示为:
spec = new OAEPParameterSpec(oaepHashAlgorithm, "MGF1",
MGF1ParameterSpec.SHA1, PSource.PSpecified.DEFAULT);
我已经检查了OpenJDK的Java 8更新60。如您所见,您需要使用算法参数。