2011-12-07 4 views
2

나는 C++에서 WinCrypt API을 사용하려고합니다.CryptoAPI/WinCrypt : C++에서 PEM 파일의 개인 키를 가져 오는 방법은 무엇입니까?

내 응용 프로그램은 파일을 암호화하고, 해독하고, 서명하고 확인해야하며 올바른 키가 있으면이를 수행하는 방법을 알고 있습니다. 하지만 내 문제는 실제로 그 키를 생성하는 동일한 응용 프로그램이 아닙니다.

그리고 : 나는 PEM 형식의 파일에서 공개 키와 개인 키입니다 무엇을 가지고

몇 가지 조사 후

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

, 나는 공개 키를 가져 오는 방법을 발견했다 : herehere, 다음 방법을 사용하십시오.

  • CreateFile에 & ReadFile을이 형식을 DER하는 PEM 형식에서 변환 할 CRYPT_STRING_BASE64HEADER으로,
  • CryptStringToBinary 파일 내용을 읽을 수 X509_PUBLIC_KEY_INFO와
  • CryptDecodeObjectEx (64 기수에서 머리글과 바닥 글 및 디코딩을 제거)
  • CryptImportPublicKeyInfo, 키를 가져 오는 중

내 문제는 개인 키과 똑같은 일을하는 것입니다. 도움이 정말 정말 감사하겠습니다 :) 감사합니다.

+0

Crypto API는 독점 암호화를위한 것으로 PGP는 단지 위어가 사용됩니다. – marinara

+0

예, 확실합니다. 그러나 사실 키의 형식을 선택할 필요가 없습니다./그렇지 않으면 독점 형식의 CryptoAPI를 선택했을 것입니다. 그러나 공개 키 가져 오기가 PEM 형식에서 가능하므로 개인 키를 사용하여 가져올 수도 있다고 생각했습니다. – nikloskoda

답변

7

PEM 개인 키는 CryptImportKey를 호출 PKCS_RSA_PRIVATE_KEY 다음과 CryptDecodeObjectEx를 사용하여 CAPI로 가져올 수 있습니다.

CAPI를 사용하여 서명하는 데 PEM으로 인코딩 된 RSA 개인 키를 사용하는 방법을 보여주는 샘플을 작성했습니다. 여기에 링크가 있습니다 : http://www.idrix.fr/Root/Samples/capi_pem.cpp

나는 이것이 도움이되기를 바랍니다.

+0

감사합니다. 너는 나를 막 다른 길에서 구해 냈다. (나는 CRYPT_PRIVATE_KEY_INFO를 성공시키지 않으려 고 노력하고 있었고, 나는 그것이 필요하다는 것을 의심했다.) –

+0

DSA 키를 사용하여 동일한 작업을 수행하는 방법에 대한 아이디어가 있습니까? –

관련 문제