| ||||
| ||||
Насколько мне известно, отображение секретного ключа в открытый однозначно. Не подскажут ли уважаемые разработчики, как при помощи CryptoAPI получить открытый ключ из проинициализированного контекста CSP | ||||
Ответы: | ||||
| ||||
Сергей ! А в каком виде тебе интересен открытый ключ? Если только открытых ключ, то есть функция CryptGetUserKey, которая возвращает контекст ключа AT_SIGNATURE | AT_KEYEXCHANGE). После этого выполняется CryptExportKey (в два прохода,первый для определения длины ключа, второй для его экспорта). Параметрами функции являются дескриптор секретного ключа и флаг PUBLICKEYBLOB. При это открытый ключ сохраняется в формате, определеном только для соответствующего провайдера. Формат открытого ключа в сертификате (поле SubjectPublicKey) совсем не совпадает с форматом предыдущего и имеест ASN структуру. Тесты для работы с ключами на уровне CSP и CryptoAPI 1.0 (которое перекрывает только уровень CSP) лежат в файле ctkey.c на сервере. PS. А получил ли уважаемый набор утилит, позволяющий пользовать GUI для отображения сертификатов ??? | ||||
| ||||
Ну, видимо, это то что мне нужно. Т.е. средство для поиска в хранилище сертификата, имея только секретный ключ на носителе. Хотя, проблема его загрузки остается (имя контейнера....и const имя CSP). Про API будет ясно завтра - либо нам скопируют с DVD, либо дадут его на некоторое время. | ||||
| ||||
Ни фига у вас так не получится. PUBLIC_KEY_BLOB, получаемый в резултате CryptExportKey никакого отношения не имеет к деровсой нотации ключа в сертификате. У него абсолютно своя структура и собственно открытый ключ 512 (1024) это только часть. Варианты: 1. Пользуем функцию CryptExportPublicKeyInfoEx(), в качестве ОИДа пользуем идентификатор открытого ключа госта (см. инклюдник) и получаем структуру CERT_PUBLIC_KEY_INFO. После этого пользуем CertFindCertificateInStore с параметром в виде предыдущей структуры. 2. Пользовать CryptCreateKeyIdentifierFromCSP правда с ограничениями по ОС (см. МСДН). Но я думая, так как мы работаем только с IE5 все будет OK. | ||||
| ||||
CryptGetUserKey(...AT_SIGNATURE...) CryptExport(...PUBLIC_BLOB...); | ||||
| ||||
Ага, счаз | ||||