【问题标题】:Encrypt text with RSA/ECB/OAEPWithMD5AndMGF1Padding in C#在 C# 中使用 RSA/ECB/OAEPWithMD5AndMGF1Padding 加密文本
【发布时间】: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


【解决方案1】:

所以根据 Topaco 的建议,我可以使用 Bouncy Castle 库加密代码。

// Read in public key from file
var pemReader = new PemReader(File.OpenText(@"D:\test.pub.pem"));
var rsaPub =(Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters)pemReader.ReadObject();
// create encrypter
var plainTextMessage = Encoding.UTF8.GetBytes("Testing message");
var encrypter = new OaepEncoding(new RsaEngine(), new MD5Digest(), new Sha1Digest(), null);
encrypter.Init(true, rsaPub);
var cipher = encrypter.ProcessBlock(plainTextMessage, 0, plainTextMessage.Length);
var encryptedtext = Convert.ToBase64String(cipher);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    相关资源
    最近更新 更多