Сбой программы при применении SHA-256 / SHA-512 вместо SHA-1 при подписании документов с RSA - PullRequest
0 голосов
/ 15 февраля 2011

Сначала я генерирую подпись и помещаю ее в текстовое поле 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();  

Затем, когда я заменяю«SHA1CryptoServiceProvider» с «SHA256CryptoServiceProvider» Я получаю необработанное исключение, которое не могу указать!
Есть ли разница при обработке algorthims SHA-2 вместо SHA-1?

EDIT1:

Исключение происходит, когда я указываю файл и нажимаю «Открыть» в диалоге открытия файла «openFileToSign».И я работаю над «WINDOWS 7»

EDIT2:

В сообщении об исключении указано «Значение недопустимо»
, а исключение возникает в строке:

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

Ответы [ 3 ]

4 голосов
/ 20 февраля 2011

Отвечая на мой собственный вопрос, когда я наконец нашел ответ в этой статье .
Оказалось, что SHA256CryptoServiceProvider не понимается CryptoConfig .
Вместо этого мы используем SHA256Managed для генерации хэша, и тогда все будет работать прекрасно.

3 голосов
/ 15 февраля 2011

Трудно сказать, если вы не скажете точное исключение.Но обратите внимание, что SHA-2 не поддерживался в более старых версиях Windows.Он был добавлен в Windows XP в пакете обновления 3 (SP3) и в Windows 2003 Server в качестве исправления или чего-то ещеСмотрите этот пост .

1 голос
/ 15 февраля 2011

Я предполагаю, что вы пытаетесь использовать 512-битный ключ.512-битные ключи слишком короткие для использования с SHA-256 (недостаточно места для минимального заполнения).

Попробуйте вместо этого использовать 1024- или 2048-битные ключи.

...