Re[5]: CryptoAPI - как достать закрытый ключ RSA?
От: mkopachev  
Дата: 03.04.05 09:48
Оценка: 3 (1)
Здравствуйте, luser, Вы писали:

L>Здравствуйте, mkopachev, Вы писали:


M>>Здравствуйте, luser, Вы писали:


L>>>Здравствуйте, mkopachev, Вы писали:


M>>>>Здравствуйте, luser, Вы писали:


L>>>>>Подскажите, пожалуйста лузеру.

L>>>>>Я не могу достать закрытый ключ RSA. Экспортировал я его так:


L>>>Спасибо что ответили, но я не могу импортировать закрытый ключ. Экспортирование проходит нормально.

L>>>С уважением Леонид.

M>> Извини не понял. Но все-таки какой код ошибки-то вылазит (если я понял он вылазит при импорте)?


L>Да правильно вылетает при импорте. GetLastError() возвращает 2148073475 ни с одним флагом ошибки CryptImportKey не совпадает (перебрал вроде все).


Ошибка называется NTE_BAD_KEY (80090003). Действительно удивительно ее появление в твоем случае. Расшифровывается она так, что ключ (очевидно в данном случае ключ на котором производится импорт) не верен.

Это то что я вычитал в документации к Крипто-Про (CPImportKey):

Один или оба из ключей, указанных hKey и hImpKey, не действительны. Байты в элементах заголовка ключевого блоба типа WORD, DWORD имеют обратный порядок по отношению к данной платформе.


Т.е. проверь, то ли ты пытаешься импортировать — возможно та информация, которая
импортируется не соответсвует той, которая была экспортирована?
И последнее, возможно криптопровайдер просто не допускает импорта не зашифрованного ключа? Попробуй сделать какой-нибудь потоковый ключик (тип RC4), а затем экспортнуть и импортнуть на нем (чтобы закрытый ключ оказался зашифрованным).

З.Ы. Вообще-то использование структур фиксированного размера для ключей не есть хорошо — оно у тебя так сделано с каким-то прицелом? Лекго может оказаться резаный алгоритм (экспортные ограничения США), с меньшей длинной ключа и структуры могут съехать. Ты длинну экспортируемого ключа проверил?

С уважением Михаил Копачев
... << RSDN@Home 1.1.4 @@subversion >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.