c# - 使用 RSACryptoServiceProvider 签名的速度

标签 c# cryptography hash

我目前正在处理一个简单的数据签名。这是我第一次使用签名,所以也许我做错了什么。但我认为使用 512 位 RSA 和 SHA1 哈希对 448 字节进行签名需要 4.6 秒是不正常的。

代码:

byte[] Data = enc.GetByte(MsgString); //Get Message as byte[]
//Data is 448 bytes long

RSACryptoServiceProvider Crypter = new RSACryptoServiceProvider(512);
Crypter.ImportCspBlob(Convert.FromBase64String(KeyString));

byte[] SignedData = Crypter.SignData(Data, "SHA1"); //Line takes 4.6 seconds

为什么这么慢?我发现这个:http://support.microsoft.com/kb/948080 ,但这是 .NET 2.0 的问题。我正在使用 4.0。

这需要那么长时间是正常的还是有错误?

感谢您的帮助。

最佳答案

只是想让您知道,我在获取 SHA1 签名哈希时遇到了同样的缓慢问题。通常每秒签署数十个或数百个事务的一些代码突然减慢到每 5 秒 1 个。

我当时在家工作,没有连接到公司的网络。经过一番谷歌搜索后,我设法找出了罪魁祸首。一个错误似乎影响了 .Net Framework 2.0 上的 RSACryptoServiceProvider - 我相信它与 .Net Framework 4.0 上使用的代码完全相同。

因为,根据http://support.microsoft.com/kb/948080 ,我暂时的缓慢可能是由于 RSACryptoServiceProvider 的 SignData 或 VerifyData 方法试图与我公司的域 Controller 通信,我决定与我的公司建立 VPN 连接,这立即取得了成功。

现在我立即再次获得 SHA1 哈希,而不是等待长达 5 秒。

我知道这不是解决方案,但至少是一个合理的解决方法。它还可以防止我们失去理智。

关于c# - 使用 RSACryptoServiceProvider 签名的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4258515/

相关文章:

c# - 重写抽象方法的 System.AccessViolationException

c# - 使用 json.net 查询 JArray 的项目属性值

c# - 无法为此文件显示设计器,因为无法设计其中的任何类

node.js - TLS ECDHE-ECDSA-AES128-GCM-SHA256 的 key 生成要求

cryptography - 如何获取所有国家的列表以及该国家不允许的加密标准

c# - 以编程方式更改 WPF DataGrid 单元格背景(不使用 XAML)

java - HMC SHA1 哈希 - Java 生成与 C# 不同的哈希输出

algorithm - 是否有支持 key 零重映射的一致性哈希算法?

regex - 如何将正则表达式字符串替换值($ 1,$ 2等)映射到哈希?

python - 如果不修改,dicts 会保留迭代顺序吗?