Главная страница
    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.013 c
15-1140883320
Игорёк
2006-02-25 19:02
2006.03.19
Delphi 2006


3-1138186225
SdrCoder
2006-01-25 13:50
2006.03.19
Variant or safe array is locked


3-1138109495
VladRaven
2006-01-24 16:31
2006.03.19
Выборка дублей в таблице SQL


1-1139832843
Yozch1
2006-02-13 15:14
2006.03.19
Коллеги, как убрать крыжик ()закладку, кнопку) в TabSheet ?


15-1140769316
Харько
2006-02-24 11:21
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский