Хеш и подписать сообщение с алгоритмом RSA в C # для компактной структуры - PullRequest
0 голосов
/ 02 декабря 2010

Привет всем,

Я пытаюсь подписать одно сообщение с помощью алгоритма RSA, я работаю над сжатием Framwork, это мой код:

private void Signer_Click(object sender, EventArgs e)
{
    ///cle de string ver byte[]
    string clePriveeFile = @"\Program Files\PrivateKey.pem";

    StreamReader reader = new StreamReader(clePriveeFile);
    string contenuKeyPrivate = reader.ReadToEnd();
    byte[] keyByte = Certification.DecodeOpenSSLPrivateKey(contenuKeyPrivate);

    string Data = "Salut tout le monde";

    byte[] DataBytes = System.Text.Encoding.UTF8.GetBytes(Data);//.UTF7.GetBytes(Data);

    //Hasher le message
    SHA1Managed sha1 = new SHA1Managed();
    byte[] hash = sha1.ComputeHash(DataBytes);

    string hach = Convert.ToBase64String(hash);



    RSACryptoServiceProvider Rsa = Certification.DecodeRSAPrivateKey(keyByte);

    byte[] sign = Rsa.SignHash(hash, CryptoConfig.MapNameToOID("SHA1"));

    string resultat = Convert.ToBase64String(sign);

    this.label1.Text = this.resultat;

}

с 'DecodeOpenSSLPrivateKey' и 'DecodeRSAPrivateKey', здесь используются те же функции: http://www.jensign.com/opensslkey/index.html

для результата моего хэша я получаю: hash = "I4t474liO6H + p8SeDsoIkxmi8b0 ="

если я делаю то же самое с командой openSSL: $ echo "Salut tout le monde" | openssl dgst -sha1 | openssl enc -base64

Я получаю это: "NjFlOWI4Y2NjN2U2MzFkNTQwNTRmZjE1ZGUyYzk2MDczYTM2ZjRjZAo ="

то же самое с моим результатом знака, с этой командой:

$ echo "Salut tout le monde" | openssl dgst -sha1 -sign PrivateKey.pem | openssl enc -base64

У меня есть подпись, как это: "V6c6XNK7O8 + IKKuGTGENdZwoWxhQLIEFHW7XSdoXzMAp1gLu8B5UxXi0lr6JhVDW6SI8p8PtlT + fxEoafY + ZCigIq4xW6e32f6hxYWeYi7silh44I1m7LF7JYR1lfcegnO0Cw + YPqLPRrZUbdcrvMo1ijUGH3SuK + iot2lait9s ="

с помощью моего кода я получаю это:

* * 1 022 результат = "YlbnppFDP5ejdYOPoUI / 1W6i + ClrKrxbIdA24IqllGDRWGBrWLtGwlfNkh4 + В + gzcrX8HI7PkNP1Pq2ud1jE4EhfUVjBkZJwXj / ZYI3fPF41oiIMdF63lZiR / SEHQ5rMTbdsfQtkkBmFTr8udCJNnmnSimRQ458nZvIsYOUW6j4 ="

Я не могу найти свою ошибку :( Кто-то может мне помочь?

Ответы [ 2 ]

1 голос
/ 02 декабря 2010

Одной из проблем является то, что вывод echo содержит суффикс новой строки. Попробуйте хэшировать "Salut tout le monde \ n". Другое - OpenSSL выводит дайджест SHA1 в шестнадцатеричном формате, поэтому кодирование результата в Base64 не имеет смысла.

0 голосов
/ 08 марта 2017

или в командной строке openssl, используйте echo | set / p = Salut tout le monde |openssl

/ p будет подавлять возврат каретки

...