Расшифровка подписи RSA / SHA1 - PullRequest
0 голосов
/ 27 ноября 2018

У меня проблема с созданием и расшифровкой подписи с использованием 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":Массив не может быть нулевым.

Почему это происходит и как это исправить?Спасибо.

...