【问题标题】:How to make RSACryptoServiceProvider work without padding (nopadding)?如何使 RSACryptoServiceProvider 在没有填充(nopadding)的情况下工作?
【发布时间】:2009-09-08 02:19:50
【问题描述】:

我需要使 C# 应用程序与 Java 应用程序兼容。

Java 应用程序使用 Cipher.getInstance("RSA/ECB/nopadding"); 初始化器来生成密码 ECB 和无填充。

但是,在 C# 中,您有 2 个填充选项:OAEP 填充或 PKCS#1 v1.5 填充。我需要一个无填充版本,否则我肯定会卡在我的项目中。

我认为没有任何方法可以使 C#.NET RSACryptoServiceProvider 使用无填充方案。但是,是否存在允许这种精度的 RSA 自定义类或库?

P.S.:C#.NET 的 RSACryptoServiceProvider ECB 是默认的吗?我找不到这方面的文档。

【问题讨论】:

    标签: c# java encryption rsa


    【解决方案1】:

    使用 OpenSSL.NET 将使无填充可用。但是,我无法让它工作 (See this question if you want to help me make it work)

    【讨论】:

      【解决方案2】:

      几乎可以肯定,在没有填充的情况下执行 RSA 会使您的密码系统损坏(不安全)。如果 C# 不允许你这样做,那么这对 C# 有利。修复 Java 端。

      【讨论】:

      • 是的,我只能同意这一点。只是不要在没有适当填充的情况下使用 RSA。未正确使用 RSA 的已知攻击太多。
      • 但是如果我需要通过一些自定义算法计算哈希并添加填充怎么办?我是否也需要使用 BigInteger 来执行自定义 RSA 计算?如此处所述:core.telegram.org/mtproto/auth_key
      【解决方案3】:

      好吧,事实是,如果你没有填充,你必须完全满足块大小。当然,通常精确地达到块大小是很奇怪的,因此你填充。

      您始终可以自己填充,然后在另一侧删除一些字符。

      您需要这样做的确切原因是什么?

      【讨论】:

      • 我不担心块大小。我使用它一次,我确切地知道块的大小。这是一个 128 字节的字节数组。
      • 啊,我跟着你。那我没办法了,道歉。我猜想如果不需要填充,那么它没有完成吗?虽然这是一个猜测,我假设因为你在问,它不是,所以,对不起:)
      • 我可能已经找到答案了!使用 OpenSsl.Net 可能对我有用。我明天去测试。 :)
      猜你喜欢
      • 2022-11-22
      • 2015-12-02
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      相关资源
      最近更新 更多