Статус: Новичок
Группы: Участники
Зарегистрирован: 22.12.2008(UTC) Сообщений: 8  Откуда: Ростов-на-Дону
|
Большое спасибо за совет. написал следующий код: Код:Var
........
s: string;
Flags, sz: dword;
reqB64: PBYTE;
skip,rsize,req_info_len, key_len: DWORD;
pCertReqInfo: PCERT_SIGNED_CONTENT_INFO;
req_info: PCERT_REQUEST_INFO;
subj: PCERT_NAME_BLOB;
ps: PChar;
.....
Flags := CRYPT_STRING_BASE64;
CryptStringToBinary(pchar(s), Length(s), Flags, nil, sz, skip, Flags);
GetMem(reqB64, sz);
CryptStringToBinary(pchar(s), Length(s), Flags, reqB64, sz, skip, Flags);
CryptDecodeObject(PKCS_7_ASN_ENCODING or X509_ASN_ENCODING, X509_CERT, reqB64, sz, CRYPT_DECODE_NOCOPY_FLAG, nil, @rsize);
GetMem(pCertReqInfo,rsize);
CryptDecodeObject(PKCS_7_ASN_ENCODING or X509_ASN_ENCODING,
X509_CERT, reqB64,
sz,
CRYPT_DECODE_NOCOPY_FLAG,
pCertReqInfo,
@rsize);
CryptDecodeObject(PKCS_7_ASN_ENCODING or X509_ASN_ENCODING,
X509_CERT_REQUEST_TO_BE_SIGNED,
pCertReqInfo^.ToBeSigned.pbData,
pCertReqInfo^.ToBeSigned.cbData,
CRYPT_DECODE_NOCOPY_FLAG,
nil,
@req_info_len);
GetMem(req_info, req_info_len);
CryptDecodeObject(PKCS_7_ASN_ENCODING or X509_ASN_ENCODING,
X509_CERT_REQUEST_TO_BE_SIGNED,
pCertReqInfo^.ToBeSigned.pbData,
pCertReqInfo^.ToBeSigned.cbData,
CRYPT_DECODE_NOCOPY_FLAG,
req_info,
@req_info_len);
Проверил, что получаем в req_info следующим кодом Код:
subj:=@req_info^.Subject;
CertNameToStr(PKCS_7_ASN_ENCODING or X509_ASN_ENCODING, subj, CERT_SIMPLE_NAME_STR, ps, 512);
В ps содержиться строка вида "ivanov,test" (запрос созадавался при "CN=ivanov,O=test"). Вроде бы как отрабатывает правильно. Далее, следуя советам из другой темы пытаюсь выполнить код: Код:
CryptDecodeObject(PKCS_7_ASN_ENCODING or X509_ASN_ENCODING,
X509_OCTET_STRING,
req_info^.SubjectPublicKeyInfo.PublicKey.pbData,
req_info^.SubjectPublicKeyInfo.PublicKey.cbData,
CRYPT_DECODE_NOCOPY_FLAG,
nil,
@key_len);
При этом получаю key_len = 8. Для открытого ключа вробы как маловато. Очень прошу Вас подсказать: Какой тип возвращает CryptDecodeObject при параметре X509_OCTET_STRING? Как из него получить строковое представление открытого ключ? Спасибо
|