使用RSA签署文档时,在应用SHA-256 / SHA-512而不是SHA-1时程序崩溃

时间:2011-02-15 10:47:34

标签: c# .net cryptography rsa digital-signature

首先,我生成一个签名并放置在txt_EmpSignature文本框中,然后在“签名”按钮单击事件处理程序中使用以下参数签署文档:

RSACryptoServiceProvider MySigner = new RSACryptoServiceProvider();
openFileToSign.ShowDialog();
FileStream file_to_sign = new FileStream(openFileToSign.FileName, FileMode.Open, FileAccess.Read);
BinaryReader reader_to_sign = new BinaryReader(file_to_sign);

byte[] data_to_sign = reader_to_sign.ReadBytes((int)file_to_sign.Length);
MySigner.FromXmlString(txt_EmpSignature.Text);
SHA1CryptoServiceProvider SHA = new SHA1CryptoServiceProvider();
byte[] signature_to_sign = MySigner.SignData(data_to_sign,SHA);
UTF8Encoding UTF = new UTF8Encoding();
txt_DocSignature.Text = Convert.ToBase64String(signature_to_sign);
reader_to_sign.Close();
file_to_sign.Close();  

然后当我用“SHA256CryptoServiceProvider”替换“SHA1CryptoServiceProvider”时,我得到一个我无法指定的未处理的异常!
处理SHA-2 algorthims而不是SHA-1时有什么区别吗?

EDIT1:

当我指定文件并在“openFileToSign”打开文件对话框中单击“打开”时,会发生异常。我正在研究“WINDOWS 7”

EDIT2:

异常消息显示“值无效”
并且例外情况发生在该行:

byte[] signature_to_sign = MySigner.SignData(data_to_sign,SHA);

3 个答案:

答案 0 :(得分:4)

回答我自己的问题,因为我终于在article中找到了答案 事实证明, CryptoConfig 无法理解 SHA256CryptoServiceProvider
相反,我们使用 SHA256Managed 生成哈希,然后一切都会很好地工作。

答案 1 :(得分:3)

很难说你是不是说了确切的例外。但请注意,旧版Windows不支持SHA-2。它已添加到SP3中的Windows XP,以及Windows 2003 Server中的修补程序或其他内容。请参阅this post

答案 2 :(得分:1)

我的猜测是你正在尝试使用512位密钥。 512位密钥太短而无法与SHA-256一起使用(没有足够的空间来进行最小填充)。

请尝试使用1024或2048位密钥。