RSA / SHA1解密签名

时间:2018-11-27 07:57:05

标签: c# rsa sha1 signature digital

我在使用RSA / SHA1创建和解密签名时遇到问题。我设法用SHA1创建签名。我使用SHA1从原始文本计算哈希,然后使用私钥对其进行加密并将其存储在文本文件中。我正在使用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”出现下一个错误:数组不能为空。

为什么会发生以及如何解决?谢谢。

0 个答案:

没有答案