0

Используя Windows CryptoAPI, можно ли получить открытый ключ RSA из закрытого ключа, который был импортирован (не сгенерирован)?CryptoAPI - как извлечь открытый ключ RSA из частного

Если я использую CryptGenKey, я могу вызвать CryptExportPublicKeyInfo и CryptImportPublicKeyInfo для получения дескриптора открытого ключа. Однако, когда я пытаюсь сделать то же самое с закрытым ключом декодируется из П и импортировать с помощью:

CryptImportKey(hCSP, pKeyBuf, cbKeyBuf, 0, CRYPT_EXPORTABLE, &hPrivKey) 

импорта закрытого ключа успешно, и у меня есть правильный дескриптор, но последующий вызов CryptExportPublicKeyInfo терпит неудачу с «Ключ делает не существует ". Похоже, что между CryptImportKey и CryptExportPublicKeyInfo нет другого вызова, но я не могу найти этот вызов API.

+0

Как выглядит ваш вызов 'CryptExportPublicKey'? Это ключ подписи или ключ шифрования ключа? – erickson

+0

Импорт PEM был сгенерирован путем вызова CryptExportKey (hKey, 0, PRIVATEKEYBLOB, 0, & buf и размера), а buf затем закодирован в DER -> PEM. Я могу успешно импортировать закрытый ключ из PEM, но не знаю, как получить из него открытый ключ. – Alex

+0

Я говорю о «последующем вызове», который терпит неудачу, а не о происхождении закрытого ключа. Второй экспорт выглядит так же, как и исходный экспорт? Я не знаком с CryptoAPI, но другие API, которые, как я знаю, предлагают API, чтобы дать вам «прозрачное» представление о ключевом материале. В случае с секретным ключом RSA, который обычно дает вам структуру, представляющую ключ в форме теоремы о сохранении китайского остатка (CRT), которая будет иметь число больших целочисленных членов. Я не видел ничего похожего на то, что быстро просматривал документы Windows CryptoAPI. Это звонит? – erickson

ответ

1

Проблема с экспортом/импортом открытого ключа заключалась в том, что закрытый ключ был сгенерирован с использованием AT_SIGNATURE, а не AT_EXCHANGE. См. explanation и example code

Смежные вопросы