Как импортировать закрытый ключ в формате PEM, используя WinCrypt и C ++? - PullRequest
4 голосов
/ 07 декабря 2011

Я пытаюсь использовать WinCrypt API в C ++.

Мое приложение должно шифровать, расшифровывать, подписывать и проверять файлы, и я знаю, как это сделать, когда у меня есть правильные ключи. Но моя проблема на самом деле в том, что это НЕ то же самое приложение, которое генерирует эти ключи.

У меня есть открытый и закрытый ключи в файлах в формате PEM:

-----BEGIN RSA PRIVATE KEY-----
[Base64 encoded]
-----END RSA PRIVATE KEY-----

А:

-----BEGIN RSA PUBLIC KEY-----
[Base64 encoded]
-----END RSA PUBLIC KEY-----

После некоторых исследований я обнаружил, как импортировать открытый ключ: здесь и здесь , используя следующие методы:

  • CreateFile & ReadFile для чтения содержимого файла
  • CryptStringToBinary , с CRYPT_STRING_BASE64HEADER для преобразования из формата PEM в формат DER (удалить верхний и нижний колонтитулы и декодировать из base64)
  • CryptDecodeObjectEx с X509_PUBLIC_KEY_INFO
  • CryptImportPublicKeyInfo , чтобы импортировать ключ

Но теперь моя проблема - сделать то же самое с закрытым ключом . Любая помощь будет очень ценится :) Спасибо.

1 Ответ

8 голосов
/ 31 мая 2012

Закрытый ключ PEM можно импортировать в CAPI, используя CryptDecodeObjectEx с PKCS_RSA_PRIVATE_KEY , а затем вызывая CryptImportKey .

Я написалПример, демонстрирующий использование закрытого ключа RSA в кодировке PEM для подписи данных с использованием CAPI.Вот ссылка на него: http://www.idrix.fr/Root/Samples/capi_pem.cpp

Надеюсь, это поможет.

...