Здравствуйте.
По протоколу взаимодействия мне необходимо создавать подпись так, как написано в статье
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..."
Все проходит хорошо, но принимающая сторона не может верефицировать подпись

Собственно вопрос — правильно ли я создаю подпись? Или проблема на другой стороне?
Заранее спасибо за ответ.
Здравствуйте, 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;
}
}
Здравствуйте, impure_soul, Вы писали:
_>Что-то я не совсем понял вот это
_>RSACryptoServiceProvider rsa = ((RSACryptoServiceProvider)certificate.PrivateKey);
_>certificate у тебя что из себя представляет?
certificate = new X509Certificate2("cert.pfx", "password");
Это сертификат, выданный мной. Публичный ключ от этого сертификата находится на принимающей стороне.
Здравствуйте, DragonMaster, Вы писали:
DM>DM>certificate = new X509Certificate2("cert.pfx", "password");
DM>
DM>Это сертификат, выданный мной. Публичный ключ от этого сертификата находится на принимающей стороне.
А в сертификате точно лежит ключ RSA? Может там DSA на самом деле. Или на принимающей стороне его считают как DSA.