| ||||
| ||||
При получении открытого ключа из сертификата он почему-то отображается некорректно, а именно, вместо первых двух байтов отображаются какие-то левые, оставшаяся часть отображается нормально. Исходный открытый ключ: 04 40 82 f9 53 28 81 47 a7 35 36 61 b5 81 d5 3f 8e b6 a1 cf d5 7c 05 ba 8c ac 1f 94 54 16 c6 8c 63 7c 14 bf e4 48 9a 0b 87 d1 d6 59 70 bc 13 2a 31 42 56 65 62 da 6a fb 34 f3 2f 5f 07 94 d3 f9 6e 5a Ключ полученный при декодировании: 40 00 00 00 98 6A 89 00 82 F9 53 28 81 47 A7 35 36 61 B5 81 D5 3F 8E B6 A1 CF D5 7C 05 BA 8C AC 1F 94 54 16 C6 8C 63 7C 14 BF E4 48 9A 0B 87 D1 D6 59 70 BC 13 2A 31 42 56 65 62 DA 6A FB 34 F3 2F 5F 07 94 D3 F9 6E 5A Может неверная константа lpszStructType? или все дело в unusedBits? В чем может быть проблема? Кусок исходника приведен ниже. Кстати, почему ключ ГОСТ 34.10-2001 состоит из 66 байт, а не 64 (512 бит)? Заранее благодарен. --------------------------- SelectedCertContext - контекст сертификата dwCertSize - размер декодируемой структуры if ( !CryptDecodeObject ( X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, szOID_SUBJECT_KEY_IDENTIFIER, SelectedCertContext->pCertInfo->SubjectPublicKeyInfo.PublicKey.pbData, SelectedCertContext->pCertInfo->SubjectPublicKeyInfo.PublicKey.cbData, 0, NULL, &dwCertSize )) { // error } publickeyblob = (byte *)malloc(dwCertSize); if ( !CryptDecodeObject ( X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, szOID_SUBJECT_KEY_IDENTIFIER, SelectedCertContext->pCertInfo->SubjectPublicKeyInfo.PublicKey.pbData, SelectedCertContext->pCertInfo->SubjectPublicKeyInfo.PublicKey.cbData, 0, publickeyblob, &dwCertSize )) { //error } char *size = new char[(dwCertSize *2)+1]; ByteToStr(dwCertSize,publickeyblob,size); | ||||
Ответы: | ||||
| ||||
Здравствуйте, > Может неверная константа lpszStructType? или все дело в unusedBits? > В чем может быть проблема? Вероятно, одна из проблем в том, что Вы неверно выбрали использование szOID_SUBJECT_KEY_IDENTIFIER (это OID раширения X.509 с идентификатор ключа). > Кстати, почему ключ ГОСТ 34.10-2001 состоит из 66 байт, а не 64 (512 бит)? Потому что он, согласно традиции, инкапсулирован ещё и в OCTET STRING. Подробности и примеры смотрите в RFC 4491 <http://tools.ietf.org/html/rfc4491> и RFC 3280 <http://tools.ietf.org/html/rfc3280> | ||||