Форум: "Основная";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
ВнизCryptoApi & криптопровайдеры и информацыя о них Найти похожие ветки
← →
Fl@sh © (2006-02-12 19:26) [0]Доброе время суток.
Вот код взят из проекта delphiworld, кот. выдает информацыю об установленых криптопровайдерах в системе и об их параметрах:
type algInfo = record
algID: ALG_ID;
dwBits: DWORD;
dwNameLen: DWORD;
szName: array[0..100] of char;
end;
{вспомогательная функция, преобразующая тип провайдера в строку}
function ProvTypeToStr(provType: DWORD): string;
begin
case provType of
PROV_RSA_FULL: ProvTypeToStr := "RSA full provider";
PROV_RSA_SIG: ProvTypeToStr := "RSA signature provider";
PROV_DSS: ProvTypeToStr := "DSS provider";
PROV_DSS_DH: ProvTypeToStr := "DSS and Diffie-Hellman provider";
PROV_FORTEZZA: ProvTypeToStr := "Fortezza provider";
PROV_MS_EXCHANGE: ProvTypeToStr := "MS Exchange provider";
PROV_RSA_SCHANNEL: ProvTypeToStr := "RSA secure channel provider";
PROV_SSL: ProvTypeToStr := "SSL provider";
else ProvTypeToStr := "Unknown provider";
end;
end;
{вспомогательная функция, преобразующая тип реализации в строку}
function ImpTypeToStr(it: DWORD): string;
begin
case it of
CRYPT_IMPL_HARDWARE: ImpTypeToStr := "аппаратный";
CRYPT_IMPL_SOFTWARE: ImpTypeToStr := "программный";
CRYPT_IMPL_MIXED: ImpTypeToStr := "смешанный";
CRYPT_IMPL_UNKNOWN: ImpTypeToStr := "неизвестен";
else ImpTypeToStr := "неверное значение";
end;
end;
{процедура вывода информации о криптопровайдерах}
procedure TMainForm.InfoItemClick(Sender: TObject);
var i: DWORD;
dwProvType, cbName, DataLen: DWORD;
provName: array[0..200] of char;
vers: array[0..3] of byte;
impType: DWORD;
ai: algInfo;
err: string;
begin
i:= 0;
FileMemo.Clear;
while (CryptEnumProviders(i, nil, 0, {проверяем наличие еще одного}
@dwProvType, nil, @cbName)) do
begin
if CryptEnumProviders(i, nil, 0, {получаем имя CSP}
@dwProvType, @provName, @cbName) then
begin
FileMemo.Lines.Add("Криптопровайдер: "+provName);
FileMemo.Lines.Add("Тип: "+IntToStr(dwProvType)+" - "+
ProvTypeToStr(dwProvType));
if not CryptAcquireContext(@hProv, nil, provName, dwProvType,
CRYPT_VERIFYCONTEXT)
then
begin
{обработка ошибок}
end;
DataLen := 4;
if not CryptGetProvParam(hProv, PP_VERSION, (@vers), @DataLen, 0)
then
begin
{обработка ошибок}
end;
FileMemo.Lines.Add("Версия: " + chr(vers[1]+) + "." + chr(vers[0]+));
if not CryptGetProvParam(hProv, PP_IMPTYPE, @impType, @DataLen, 0)
then
begin
{обработка ошибок}
end;
FileMemo.Lines.Add("Тип реализации: "+ImpTypeToStr(impType));
FileMemo.Lines.Add("Поддерживает алгоритмы:");
DataLen := sizeof(ai);
if not CryptGetProvParam(hProv, PP_ENUMALGS, @ai, @DataLen, CRYPT_FIRST)
then
begin
{обработка ошибок}
end;
with ai do
FileMemo.Lines.Add(szName+#9+"длина ключа - "+IntToStr(dwBits)+
" бит" +#9+ "ID: "+IntToStr(AlgID));
DataLen := sizeof(ai);
while CryptGetProvParam(hProv, PP_ENUMALGS, @ai, @DataLen, 0) do
begin
with ai do FileMemo.Lines.Add(szName+#9+"длина ключа - "
+IntToStr(dwBits)+" бит"+#9+"ID: "+IntToStr(AlgID));
DataLen := sizeof(ai);
end;
FileMemo.Lines.Add("");
CryptReleaseContext(hProv, 0);
end;
inc(i);
end;
end;
Так вот, информацыю об провайдерах выдает: назву, ти!
А вот тип реализацыи, алгоритмы не работает!!
Помогите разобраться:
Вот например эта строчка:
FileMemo.Lines.Add("Версия: " + chr(vers[1]+) + "." + chr(vers[0]+));
Как это можно понять??
Я удалял "+" и вместо chr ставил IntToStr
если стоит chr, то после "Версия в мемо дальше ничего не вставляет, хотя должно вставить хотя б "."
Просветите метя.
Вот ссылка на ресурс, с какого взято, идентичен, что и на delphiworld:
http://cpp.com.ua/?in=kpp_show_article&kpp_art_ID=296&_by_id=2&_CATEGORY=3&_Theme_Name=%C1%E5%E7%E E%EF%E0%F1%ED%EE%F1%F2%FC
← →
Fl@sh © (2006-02-12 19:28) [1]Может возможно как-то подругому узнать параметры провайдера?
← →
Fl@sh © (2006-02-12 21:04) [2]Неужели никто не занимался подобным вопросом??!
Поискал тут на яндексе, все одно и тоже :((
http://www.yandex.ru/yandsearch?text=%F3%E7%ED%E0%F2%FC+%E8%ED%F4%EE%F0%EC%E0%F6%E8%FE+%EE+%EA%F0%E8% EF%F2%EE%EF%F0%EE%E2%E0%E9%E4%E5%F0%E5+delphi&stype=www
← →
Eraser © (2006-02-12 21:29) [3]
> Fl@sh ©
может это поможет
http://www.podgoretsky.com/ftp/Docs/Delphi/CryptoAPI/
← →
Fl@sh © (2006-02-12 21:53) [4]
> Eraser © (12.02.06 21:29) [3]
Спасибо!!!
Вот уже нашел ошибку:
вместоFileMemo.Lines.Add("Версия: " + chr(vers[1]+) + "." + chr(vers[0]+));
, (а так написано в трех разных экземплярах)
надо вот так:FileMemo.Lines.Add("Âåðñèÿ: "+chr(vers[1]+$30)+"."+chr(vers[0]+$30));
Буду разбираться..
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c