【问题标题】:C# - Get RSA encryption progressC# - 获取 RSA 加密进度
【发布时间】:2017-06-22 10:44:43
【问题描述】:

如何获取 RSA 加密进度?我想在进度条中显示它。 感谢您的帮助。

    using System.Security.Cryptography; 
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(4096);

//I want to get percentage process of this function, because it takes a lot of time.
byte[] encrypted = RSA.Encrypt(Encoding.Default.GetBytes("some text", true));

【问题讨论】:

  • 通过将总字节数保存在一个变量中,并将当前字节数保存在另一个变量中。阅读How to Ask,展示您的代码并解释您的尝试。
  • 你不能,那个方法不报告进度。如果可能的话,您唯一的选择是调用该方法或具有较小块的类似方法,并在两者之间更新进度。
  • 但是,您通常不会使用 RSA 加密来加密大型二进制文件。相反,您生成一个随机密钥并使用更快的加密方法,如 RIJNDAEL,只使用 RSA 加密密钥。
  • 谢谢。我会这样做的。
  • 用 AES 代替 RIJNDAEL。 AES 是 Rijndael 的一个子集,而 Rijndael 在许多平台上不可用,而 AES 是。 AES -> 高级加密标准。在某些实现中,AES 可作为 Rijndael 的一个选项使用,并且很多时候是默认选项。

标签: c# encryption rsa progress


【解决方案1】:

使用 16k 位密钥,我可以在 2893 毫秒内执行 1000 次加密调用(因此每次大约 3 毫秒),这似乎不够慢,不需要进度条。

另一方面,

解密 1000 次调用需要 458,554 毫秒(因此每次约为 460 毫秒)。但是半秒似乎仍然不能保证进度条。而且没有多少人拥有 16k 位 RSA 密钥(因为它们需要几个小时才能生成)

其他一些快速数字(每 1000 次调用的时间,以毫秒为单位):

Keysize | Encrypt | Decrypt
--------|---------|--------
  16384 |    2893 | 458554
   4096 |     216 |  14636
   3584 |     182 |  13259
   3072 |     149 |   8370
   2560 |     127 |   4680
   2048 |      94 |   2083
   1536 |      86 |   1236
   1024 |      71 |    473
    512 |      64 |    150

所以你能做的最好的就是发送短信的虚假进度条......你做一些你认为需要多长时间的启发式方法,并人为地移动进度条,然后在 80 处做一个“eep”时刻% 当它实际上没有完成时。

由于指导是仅使用非对称操作来引导对称操作(如 cmets 中已建议的那样),如果对称操作对您来说足够慢,您可能可以只在对称操作上使用进度条保证它。如果你想在不对称操作中加入一个软糖因素,那也没什么坏处。

【讨论】:

  • 注意到 OP 使用的是 4096 位密钥,时间很短。一定有其他事情发生。
【解决方案2】:

查看这篇博文:https://www.codeproject.com/Articles/10877/Public-Key-RSA-Encryption-in-C-NET

您可以使 for 循环的每次迭代都增加进度条。

如需更具体的帮助,请发布您的代码并告诉我们您遇到的问题。

【讨论】:

  • 谢谢,但我使用的是 RSA.Encrypt 函数,这只是一个命令。我想得到这个功能的进展,因为它需要很多时间。
  • 我认为你可以在那里更具体.. 用一些代码编辑你的问题,这样我们就可以更好地理解你在做什么。您使用什么库进行 RSA 加密?
  • @Kaprog 这是特定库还是来自标准库?告诉System.Cryptographi...类的完整路径。
猜你喜欢
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
  • 2012-11-27
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多