18.06.2004 16:08:29Извлечение открытого ключа Ответов: 4
mike
Различаются открытые ключи на 1 байт полученные из :
1. Контейнера на дискете при помощи функций CryptGetUserKey() и CryptExportKey();
и из:
2. Структуры CERT_CONTEXT, полученной из файла сертификата из этого контейнера при помощи функций CryptImportPublicKeyInfo() и CryptExportKey()
Длина одинаковая, разница в 1 байте,
подскажите в чем может быть ошибка.
 
Ответы:
21.06.2004 10:57:10mike
разница в третьем байте из 100.
в одном варианте 00, в другом 01.
Подскажите, пожалуйста, что в нем хранится, это какой-то признак?
21.06.2004 11:57:58chip
А 100 байт для сертификата не кажется маловато?
структура CERT_CONTEXT определана вот так:
typedef struct _CERT_CONTEXT { DWORD dwCertEncodingType; BYTE* pbCertEncoded; DWORD cbCertEncoded; PCERT_INFO pCertInfo; HCERTSTORE hCertStore;
} CERT_CONTEXT, *PCERT_CONTEXT;
typedef const CERT_CONTEXT *PCCERT_CONTEXT;
Первые 4 байта занимает dwCertEncodingType
он может принимать
X509_ASN_ENCODING или PKCS_7_ASN_ENCODING
Они определены значениями
#define X509_ASN_ENCODING 0x00000001
#define PKCS_7_ASN_ENCODING 0x00010000
Вот и смотри что у тебя не сходится.
21.06.2004 12:25:32mike
100 байт не сертификата, а открытого ключа, в структуре PUBLICKEYBLOB.
из MSDN: 3-й байт:
blobheader.reserved = 0; // 0x0000
When filling in the BLOBHEADER structure, place zero in the reserved field.
если из сертификата получаю ключ то да - с нулем, а из контейнера - с 1.
Что это - ошибка УЦ при выпуске ключей или что?
24.06.2004 11:19:00mike
Help!
Есть у кого-нибудь еще дельные мысли?