| ||||
| ||||
Возникало на КриптоПро 2.0. Поставил КриптоПро 3.0 КС1 - то же самое :( В чем может быть проблема? Код: //--- Create a new hash object. if not(CryptCreateHash( Provider, //--- контекст провайдера КриптоПро, получен с пом. CryptAcquireContext с dwFlags = 0 algid, 0, 0, @hHash)) then begin raise TCryptException.Create(ceOtherCryptError); end; // Установка параметра HP_OID. // По умолчанию провайдер работает на наборе параметров 1.2.643.2.2.30.1. // Без установки параметра HP_OID программа будет неверно работать, // если параметры хеширования не будут являться параметрами // по умолчанию. if(not CryptSetHashParam( hHash, HP_OID, PByte(PChar(szOID_CP_GOST_R3411)), 0)) then begin raise TCryptException.Create(ceOtherCryptError); end; | ||||
Ответы: | ||||
| ||||
Вопрос - зачем вообще задавать HP_OID ? Ведь если его не задавать - то всегда будет использоваться значение по умолчанию. А в качестве значения параметра нужно использовать одну из констант: #define OID_HashTest "1.2.643.2.2.30.0" #define OID_HashVerbaO "1.2.643.2.2.30.1" /* ГОСТ Р 34.11-94, параметры по умолчанию */ #define OID_HashVar_1 "1.2.643.2.2.30.2" #define OID_HashVar_2 "1.2.643.2.2.30.3" #define OID_HashVar_3 "1.2.643.2.2.30.4" #define OID_HashVar_Default OID_HashVerbaO или непосредственно строку (заканчивающуюся нулём) со значением одной из этих констант (без кавычек). | ||||
| ||||
Спасибо. Просто у меня проблема такого рода. Есть сервер,написанный не мной,но протокол взаимодействия документирован (частично и с ошибками, увы).Там базовый документ подписывается и вместе с подписью и сертификатом для проверки пересылается в зашифрованном виде либо от клиента к серверу, либо наоборот. Так вот... Сервер не может проверить подпись клиента, в то же время клиент может проверить как подпись под сообщениями сервера, так и подпись под сообщениями, отсылаемыми серверу. Причем расшифровать мои сообщения сервер может, а подпись проверить - нет :( | ||||
| ||||
Спасибо! Получилось установить HP_OID, значит я неправильные значения передавал. | ||||