03.11.2004 10:19:32эц подпись ГОСТ-34.11-94 Ответов: 2
Dmitri Lazarev
пытаюсь подписать сообщение из .net framework указанным алгоритмом.

Сертификат создал. Не могу понять - какая константа соответствует алгоритму эцп. На CALG_GR3411 - ругается, невалидный говорит алгоритм.

По идее вроде должна быть - CALG_GR3410, но тогда он CryptoPro спрашивает пароль, и затем выводит окно для рандомного ввода, после этого видимо что-то ломает в хранилище...

Обычный стандартный микрософтовский алгоритм работает.

Код:
Random r = new Random();
byte[] b = new byte[1024];
r.NextBytes(b);

System.Security.Cryptography.CspParameters parameter = new System.Security.Cryptography.CspParameters(13);
//parameter.Flags = System.Security.Cryptography.CspProviderFlags.UseDefaultKeyContainer |
//System.Security.Cryptography.CspProviderFlags.UseExistingKey ;

parameter.ProviderName = "Crypto-Pro Cryptographic Service Provider";
parameter.ProviderType = 2;
parameter.KeyNumber = (1<<13) | (7<<9) | 30; //CALG_GR3410
parameter.KeyContainerName = "42fc2272-61e3-4cff-8ad5-d5bb444c8a2f";

System.Security.Cryptography.DSACryptoServiceProvider provider = new System.Security.Cryptography.DSACryptoServiceProvider(parameter);

byte[] bb = provider.SignData(b);
bool res = provider.VerifyData(b, bb);

Console.ReadLine();

Не сталкивался ли кто с этой проблемой?
 
Ответы:
04.11.2004 11:44:06xyz
А вас эта строчка не смучает:
System.Security.Cryptography.DSACryptoServiceProvider(parameter)?
04.11.2004 12:01:02Dmitri Lazarev
вообще смущает, правда непонятно почему в цеплюсплюс я работаю с чистым апи, а в дотнете работаю с реальными провайдерами... :(

Проблема закрыта - пришлось писать на апи.