Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1141170188
kizam
2006-03-01 02:43
2006.03.19
VK_A не пашет


4-1132859053
homm
2005-11-24 22:04
2006.03.19
Изменение порядка прорисовки


15-1140695598
vidiv
2006-02-23 14:53
2006.03.19
Зацените работу


2-1141013273
walkernet
2006-02-27 07:07
2006.03.19
вопрос по LMD Tools 2003


2-1141121527
sanich
2006-02-28 13:12
2006.03.19
Поиск подстроки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский