Статус: Новичок
Группы: Участники
Зарегистрирован: 09.09.2010(UTC) Сообщений: 7 Откуда: Москва
|
Кстати, вот так получилось вытащить серийник, топорно, тупо, но работает Код:
st,st1,str:String;
...
str:='0123456789ABCDEF';
st1:='';
for i:=pUsercert.pCertInfo.SerialNumber.cbData-1 downto 0 do
Begin
st:=str[trunc(pUserCert.pCertInfo.SerialNumber.pbData[i]/16)+1]+ str[(pUserCert.pCertInfo.SerialNumber.pbData[i]-trunc(pUserCert.pCertInfo.SerialNumber.pbData[i]/16)*16)+1];
st1:=st1+' '+st;
End;
memo1.Lines.Add('Serial Number: '+st1);
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 24.12.2010(UTC) Сообщений: 3
|
А не подскажете, как получить из сертификата список расширений в виде strings?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,732 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Если это вопрос про использование CryptoAPI, то расширения хранятся в массиве CERT_CONTEXT::pCertInfo->rgExtension[] |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 24.12.2010(UTC) Сообщений: 3
|
Меня интересуют эти расширения [IMG]http://www.imghost.in/?di=512932073348[/IMG] А в cert.pCertInfo.rgExtension.pszObjId совершенно другое. Или это надо CryptDecodeObject`ом вытаскивать, или я совсем не в ту сторону смотрю... Есть ли где-нибудь наглядный пример подобной разборки сертификата? Отредактировано пользователем 24 декабря 2010 г. 21:23:41(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.08.2009(UTC) Сообщений: 52
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 2 раз в 2 постах
|
Helior, два примерно одинаковых способа: 1) Код:type
PCharArr = ^TCharArr;
TCharArr = array[0..0] of PChar;
procedure CertGetEnhKeyUsage(Context: PCCERT_CONTEXT; Strings: TStrings);
var
pEnhKeyUsage: PCERT_ENHKEY_USAGE;
cbStructInfo: DWORD;
I: Cardinal;
begin
if not Assigned(Strings) then
raise Exception.Create('ругаемся, что объект не создан...');
if CertGetEnhancedKeyUsage(Context, 0, nil, @cbStructInfo) then
begin
GetMem(pEnhKeyUsage, cbStructInfo);
try
if CertGetEnhancedKeyUsage(Context, 0, pEnhKeyUsage, @cbStructInfo) then
begin
for I := 0 to pEnhKeyUsage^.cUsageIdentifier -1 do
Strings.Add(PCharArr(pEnhKeyUsage^.rgpszUsageIdentifier)[I]);
end;
finally
FreeMem(pEnhKeyUsage, cbStructInfo);
end;
end;
end;
2) Код:type
PCharArr = ^TCharArr;
TCharArr = array[0..0] of PChar;
procedure CertGetEnhKeyUsage(Context: PCCERT_CONTEXT; Strings: TStrings);
var
pExtension: PCERT_EXTENSION;
pEnhKeyUsage: PCERT_ENHKEY_USAGE;
pvStructInfo: PVOID;
cbStructInfo: DWORD;
I: Cardinal;
begin
if not Assigned(Strings) then
raise Exception.Create('ругаемся, что объект не создан...');
pExtension := CertFindExtension(szOID_ENHANCED_KEY_USAGE,
Context^.pCertInfo^.cExtension, Context^.pCertInfo^.rgExtension);
if Assigned(pExtension) and Win32Check(CryptDecodeObject(X509_ASN_ENCODING,
X509_ENHANCED_KEY_USAGE, pExtension^.Value.pbData, pExtension^.Value.cbData, CRYPT_DECODE_NOCOPY_FLAG, nil, @cbStructInfo)) then
begin
GetMem(pvStructInfo, cbStructInfo);
try
CryptDecodeObject(X509_ASN_ENCODING, X509_ENHANCED_KEY_USAGE,
pExtension^.Value.pbData, pExtension^.Value.cbData, 0, pvStructInfo, @cbStructInfo);
pEnhKeyUsage := PCERT_ENHKEY_USAGE(pvStructInfo);
for I := 0 to pEnhKeyUsage^.cUsageIdentifier -1 do
Strings.Add(PCharArr(pEnhKeyUsage^.rgpszUsageIdentifier)[I]);
finally
FreeMem(pvStructInfo, cbStructInfo);
end;
end;
end;
Ты не из казначейства?
|
1 пользователь поблагодарил Dmitriy3008 за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 24.12.2010(UTC) Сообщений: 3
|
Спасибо, товарищ ))))) Ты меня прям спас, а то я спать не мог. Сижу теперь курю код. Да, из казначейства. По расширениям понял?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.08.2009(UTC) Сообщений: 52
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 2 раз в 2 постах
|
Да, по расширениям. Рад помочь коллеге.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close