【发布时间】:2021-02-28 11:22:07
【问题描述】:
我们被要求使用以下加密方法 RSA/ECB/OAEPWithMD5AndMGF1Padding 加密文本。
在定义 OAEP 填充时,我们只能定义一个哈希函数 (MD5),而我找不到任何方法来定义另一个哈希函数 (MGF1)。
var rsa = new RSACng();
rsa.ImportParameters(parameters);
byte[] bytesToBeEncoded = Encoding.UTF8.GetBytes("Testing message");
var encryptedText = rsa.Encrypt(bytesToBeEncoded, RSAEncryptionPadding.CreateOaep(HashAlgorithmName.MD5));
我们有什么方法可以为 Oaep 填充 (MGF1) 定义其他哈希函数,还是在 C# 中不可能?
谢谢
【问题讨论】:
-
如果您使用 Oracle 提供程序,而不是 MD5,Java 转换
RSA/ECB/OAEPWithMD5AndMGF1Padding使用 SHA-1 作为 MGF1 哈希函数。 -
感谢@PresidentJamesK.Polk 的回复。您的意思是从 C# 代码中我们只需要使用 SHA-1 而不是 MD5 进行 OAEP 填充,这将等同于 JAVA RSA/ECB/OAEPWithMD5AndMGF1Padding? var encryptedText = rsa.Encrypt(bytesToBeEncoded, RSAEncryptionPadding.OaepSHA1);
-
不,我的意思是我希望
RSAEncryptionPadding.CreateOaep(HashAlgorithmName.MD5)正是您想要的算法,即在Java 中指定为RSA/ECB/OAEPWithMD5AndMGF1Padding的算法。很抱歉,我现在无法测试。 -
C# 对 OAEP 摘要和 MGF1 摘要都使用 same 摘要。因此,
RSAEncryptionPadding.CreateOaep(HashAlgorithmName.MD5)MD5 应用于 MGF1 摘要,这与 Java 不同,Java 使用 SHA1 作为RSA/ECB/OAEPWithMD5AndMGF1Padding和 SunJCE 提供程序的 MGF1 摘要,正如 James K. Polk 总统的评论中已经提到的那样。因此解密失败。 BouncyCastle/C# 允许两个摘要的单独规范,并且将是一个替代方案。 Here 是一个用于加密的 BouncyCastle/C# 示例。 -
@PresidentJamesK.Polk - 据我所知。对于类似的帖子,我试图找出如何仅使用 C# 板载方法分别为 OAEP 指定两个摘要,但在 MS 文档或 www.因此,我通过使用 C# 加密并使用 Java 解密并为后者显式指定两个摘要来测试 C# 行为。结果是两个 OAEP 摘要设置相同。
标签: c# encryption rsa md5 oaep