Статус: Участник
Группы: Участники
Зарегистрирован: 13.12.2011(UTC) Сообщений: 22
|
Андрей * написал:PROV_RSA_FULL - если ты явно указал... Цитата: номер провайдера всегда возвращается одно и то же.. а в итоговом приложении - тоже будешь "по контейнеру" искать? p.s. может... начнешь с сертификатов? Список личных, информация о каждом и т.п., путь к контейнеру, криптопровайдер и наличие закрытого ключа.... В общем, дело такое: Для тестов создал на Крипто Про сертификат с секретным ключом. Для точности даю ссылку, где делал сертификат: http://www.cryptopro.ru/certsrv/обменялись сертификатами со второй стороной. Они говорят, что нужно Гостовский алгоритм подписи ЭЦП. Установил я программу Крипто Апи 2.0, далее через панель управления зашел в крипто Про 2.0, там создал реестр и экспортнул туда сертификат. Теперь из этого реестра надо выхватывать сертификат. Никак не получается... как это делать? Вот нашел код один: Код:
Function GetSignSignature(ASignText: String): String;
var
Prov: HCRYPTPROV;
Hash: HCRYPTHASH;
BufLen: DWORD;
AContainerName: string;
begin
AContainerName := DoChooseContainer;
// Подключаемся к провайдеру
CryptAcquireContext(@Prov, PChar(AContainerName), PChar(CP_GR3410_2001_PROV_A), PROV_GOST_2001_DH, 0);
// Создаем ХЭШ объект
CryptCreateHash(Prov, 32798, 0, 0, @Hash);
// Считаем ХЭШ
CryptHashData(Hash, PByte(ASignText), Length(ASignText), 0);
// Определяем длину
BufLen:=0;
if not CryptSignHash(Hash, AT_SIGNATURE, nil, 0, nil, @BufLen)
then
begin
ShowMessage(SysErrorMessage(GetLastError));
end;
// Забираем
if BufLen>0 then begin
SetLength(Result, BufLen);
CryptSignHash(Hash, AT_SIGNATURE, nil, 0, PByte(Result), @BufLen)
end;
CryptDestroyHash(Hash);
CryptReleaseContext(Prov,0);
End;
Только у меня не определяются константы CP_GR3410_2001_PROV_A, PROV_GOST_2001_DH - где их брать? А вообще я проверял ошибки с помощью Win32Check - говорит, что не найдет пары ключей... Вот и получается, что не цепляет он контейнер(реестр)
|