У меня проблема с созданием и расшифровкой подписи с использованием RSA / SHA1.Мне удалось создать подпись с SHA1.Я использовал SHA1 для вычисления Hash из исходного текста, затем зашифровал его с помощью закрытого ключа и сохранил его в текстовом файле.Я использую RSACryptoServiceProvider.Теперь мне нужно снова прочитать его из текстового файла, расшифровать подпись с помощью открытого ключа и сравнить его с новым хешем из расшифрованного текста.
Код для создания хеша (и шифрования для получения подписи):
private void btnHash_Click(object sender, EventArgs e)
{
nekriptirani_tekst = System.IO.File.ReadAllText(@"C:\Users\Ivan\Desktop\OS2 PROJEKT\tekst.txt");
byte[] tekst_bajtovi = Encoding.ASCII.GetBytes(nekriptirani_tekst);
using (SHA1Managed sha1 = new SHA1Managed())
{
var hash = sha1.ComputeHash(tekst_bajtovi);
kriptirani_potpis_bajtovi = hash;
hash_string_original=Convert.ToBase64String(hash);
MessageBox.Show(hash_string_original);
kriptirani_potpis = RSAEncrypt(hash, privatni_klj, false);
potpis_original = Encoding.UTF8.GetString(kriptirani_potpis);
System.IO.File.WriteAllText(@"C:\Users\Ivan\Desktop\OS2 PROJEKT\potpis_poruke.txt", potpis_original);
}
}
Код для чтения подписи и "попытки" расшифровать ее с помощью открытого ключа (вот в чем проблема):
private void btnProvjera_Click(object sender, EventArgs e)
{
dekriptirani_tekst = System.IO.File.ReadAllText(@"C:\Users\Ivan\Desktop\OS2 PROJEKT\dekriptirani_tekst.txt");
byte[] tekst_bajtovi = Encoding.ASCII.GetBytes(dekriptirani_tekst);
using (SHA1Managed sha1 = new SHA1Managed())
{
var hash = sha1.ComputeHash(tekst_bajtovi);
hash_string_dekriptirano = Convert.ToBase64String(hash);
kriptirani_potpis_dekriptirano_bajtovi = hash;
MessageBox.Show(hash_string_dekriptirano);
//IN THE CODE BELOW IS THE PROBLEM:
string potpis_iz_datoteke= System.IO.File.ReadAllText(@"C:\Users\Ivan\Desktop\OS2 PROJEKT\potpis_poruke.txt");
byte[] bajtovi_potpisa = Encoding.ASCII.GetBytes(potpis_iz_datoteke);
kriptirani_potpis_dekriptirano = RSADecrypt(bajtovi_potpisa, javni_klj, false);
MessageBox.Show(Encoding.UTF8.GetString(kriptirani_potpis_dekriptirano));
}
Проблема в том, что у меня следующая ошибка в "kriptirani_potpis_dekriptirano":Массив не может быть нулевым.
Почему это происходит и как это исправить?Спасибо.