Статус: Участник
Группы: Участники
Зарегистрирован: 25.05.2012(UTC) Сообщений: 27   Откуда: Нижний Новгород Сказал «Спасибо»: 4 раз
|
При разборе CERT_ALT_NAME_OTHER_NAME, получаю необходимую строку - но с двумя ведущими лишними байтами. Спасибо) Код:
if (!CryptDecodeObject(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, szOID_SUBJECT_ALT_NAME2,
data, data_len, 0, NULL, &struct_info_len)) {
RETURN_FALSE;
}
void *struct_info = emalloc(struct_info_len);
if (!CryptDecodeObject(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, szOID_SUBJECT_ALT_NAME2,
data, data_len, 0, struct_info, &struct_info_len)) {
RETURN_FALSE;
}
PCERT_ALT_NAME_INFO cert_alt_name_info = struct_info;
while(cert_alt_name_info->cAltEntry-- > 0) {
CERT_ALT_NAME_ENTRY cert_alt_name_entry = cert_alt_name_info->rgAltEntry[cert_alt_name_info->cAltEntry];
if (cert_alt_name_entry.dwAltNameChoice == CERT_ALT_NAME_OTHER_NAME) {
// и вот здесь два результат с двумя ведущими некорректными байтами
// [0C 26] D0 9E D0 90 D0 9E
// [0C 2E] D0 A1 D0 B5 D1 81
// cert_alt_name_entry._empty_union_.pOtherName->Value.pbData
}
}
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,407  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 721 раз в 625 постах
|
это asn1 кодированная строка, ее нужно декодировать. |
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,407  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 721 раз в 625 постах
|
http://habrahabr.ru/post/150820/Цитата:Тип UTF8String (класс тэга UNIVERSAL, номер тэга 12, форма кодирования — примитивная). Представление символов Unicode, но с дополнительной обработкой, позволяющей кодировать каждый символ в последовательность байт переменной длины (от 1 до 7-ми байт). |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 25.05.2012(UTC) Сообщений: 27   Откуда: Нижний Новгород Сказал «Спасибо»: 4 раз
|
Автор: maxdm  это asn1 кодированная строка, ее нужно декодировать. я так понимаю следующий код корректен для этой задачи? Код:
DWORD cbDecoded = 0;
CryptDecodeObject(
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
X509_OCTET_STRING,
cert_alt_name_entry._empty_union_.pOtherName->Value.pbData,
cert_alt_name_entry._empty_union_.pOtherName->Value.cbData,
0,
NULL,
&cbDecoded
);
LPVOID pbDecoded = emalloc(cbDecoded);
CryptDecodeObject(
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
X509_OCTET_STRING,
cert_alt_name_entry._empty_union_.pOtherName->Value.pbData,
cert_alt_name_entry._empty_union_.pOtherName->Value.cbData,
0,
pbDecoded,
&cbDecoded
);
PCRYPT_DATA_BLOB pDataBlob = (PCRYPT_DATA_BLOB) pbDecoded;
// pDataBlob->pbData
// pDataBlob->cbData
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,407  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 721 раз в 625 постах
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 25.05.2012(UTC) Сообщений: 27   Откуда: Нижний Новгород Сказал «Спасибо»: 4 раз
|
Автор: maxdm  X509_ANY_STRING все ок. только остался один вопрос - при использовании X509_OCTET_STRING строка в UTF-8, при использовании X509_ANY_STRING и CertRDNValueToStr получаю строку в Windows-1251?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,407  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 721 раз в 625 постах
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 25.05.2012(UTC) Сообщений: 27   Откуда: Нижний Новгород Сказал «Спасибо»: 4 раз
|
Автор: zer0c14  Автор: maxdm  X509_ANY_STRING все ок. только остался один вопрос - при использовании X509_OCTET_STRING строка в UTF-8, при использовании X509_ANY_STRING и CertRDNValueToStr получаю строку в Windows-1251? а в utf-8 можно как-то сразу получить, чтобы отдельно не переводить? и если не сложно - какой-то особенный смысл возвращения windows-1251 есть (оно вроде в asn1 как utf8, ради повышения образованности). и спасибо за помощь)
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,407  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 721 раз в 625 постах
|
X509_ANY_STRING разве не UTF8 вернет? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 25.05.2012(UTC) Сообщений: 27   Откуда: Нижний Новгород Сказал «Спасибо»: 4 раз
|
Автор: maxdm  X509_ANY_STRING разве не UTF8 вернет? CryptDecodeObject(.., X509_ANY_STRING, ...) заполнит PCERT_NAME_VALUE(DWORD dwValueType, CERT_RDN_VALUE_BLOB Value), и чтобы извлечь из него значение я прогоняю его через CertRDNValueToStr(...), который вернет уже значение в Windows-1251. А надо получить значение в UTF-8.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close