Создание цифровой подписи в C#
От: DragonMaster  
Дата: 07.11.07 08:44
Оценка:
Здравствуйте.

По протоколу взаимодействия мне необходимо создавать подпись так, как написано в статье http://rsdn.ru/article/crypto/signature.xml
Автор(ы): Евгений Грищенко
Дата: 14.10.2002
(глава "Cоздание обычной цифровой подписи"). Если я правильно понял, то аналог на C# выглядит так:

RSACryptoServiceProvider rsa = ((RSACryptoServiceProvider)certificate.PrivateKey);
string sign = bytesToHexString(rsa.SignData(Encoding.GetEncoding("UTF-8").GetBytes(stringToSign), new MD5CryptoServiceProvider()));

bytesToHexString — переводит массив байт к виду "12AF..."

Все проходит хорошо, но принимающая сторона не может верефицировать подпись
Собственно вопрос — правильно ли я создаю подпись? Или проблема на другой стороне?

Заранее спасибо за ответ.
Re: Создание цифровой подписи в C#
От: impure_soul Россия  
Дата: 07.11.07 09:06
Оценка:
Здравствуйте, DragonMaster, Вы писали:

DM>
DM>RSACryptoServiceProvider rsa = ((RSACryptoServiceProvider)certificate.PrivateKey);
DM>string sign = bytesToHexString(rsa.SignData(Encoding.GetEncoding("UTF-8").GetBytes(stringToSign), new MD5CryptoServiceProvider()));
DM>


Что-то я не совсем понял вот это
RSACryptoServiceProvider rsa = ((RSACryptoServiceProvider)certificate.PrivateKey);
certificate у тебя что из себя представляет?

Если дело не в этой строчке, то точно на второй стороне ... я создаю подпись также, только беру ключи из заранее сохранённой строки в Base64:

public byte[] RSASignData(byte[] DataToSign, string RSAKeyInfo)
        {
            try
            {
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                RSA.ImportCspBlob(Convert.FromBase64String(RSAKeyInfo));
                return RSA.SignData(DataToSign, new MD5CryptoServiceProvider());
            }
            catch (CryptographicException e)
            {
                return null;
            }
        }
Re[2]: Создание цифровой подписи в C#
От: DragonMaster  
Дата: 07.11.07 09:17
Оценка:
Здравствуйте, impure_soul, Вы писали:

_>Что-то я не совсем понял вот это

_>RSACryptoServiceProvider rsa = ((RSACryptoServiceProvider)certificate.PrivateKey);
_>certificate у тебя что из себя представляет?


certificate = new X509Certificate2("cert.pfx", "password");

Это сертификат, выданный мной. Публичный ключ от этого сертификата находится на принимающей стороне.
Re[3]: Создание цифровой подписи в C#
От: impure_soul Россия  
Дата: 07.11.07 09:27
Оценка:
Здравствуйте, DragonMaster, Вы писали:

DM>
DM>certificate = new X509Certificate2("cert.pfx", "password");
DM>

DM>Это сертификат, выданный мной. Публичный ключ от этого сертификата находится на принимающей стороне.

А в сертификате точно лежит ключ RSA? Может там DSA на самом деле. Или на принимающей стороне его считают как DSA.
Re[4]: Создание цифровой подписи в C#
От: DragonMaster  
Дата: 07.11.07 09:53
Оценка:
Здравствуйте, impure_soul, Вы писали:

_>А в сертификате точно лежит ключ RSA? Может там DSA на самом деле. Или на принимающей стороне его считают как DSA.


В сертификате точно RSA.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.