| ||||
| ||||
Различаются открытые ключи на 1 байт полученные из : 1. Контейнера на дискете при помощи функций CryptGetUserKey() и CryptExportKey(); и из: 2. Структуры CERT_CONTEXT, полученной из файла сертификата из этого контейнера при помощи функций CryptImportPublicKeyInfo() и CryptExportKey() Длина одинаковая, разница в 1 байте, подскажите в чем может быть ошибка. | ||||
Ответы: | ||||
| ||||
разница в третьем байте из 100. в одном варианте 00, в другом 01. Подскажите, пожалуйста, что в нем хранится, это какой-то признак? | ||||
| ||||
А 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 Вот и смотри что у тебя не сходится. | ||||
| ||||
100 байт не сертификата, а открытого ключа, в структуре PUBLICKEYBLOB. из MSDN: 3-й байт: blobheader.reserved = 0; // 0x0000 When filling in the BLOBHEADER structure, place zero in the reserved field. если из сертификата получаю ключ то да - с нулем, а из контейнера - с 1. Что это - ошибка УЦ при выпуске ключей или что? | ||||
| ||||
Help! Есть у кого-нибудь еще дельные мысли? | ||||