0

Microsoft CryptoAPI 용 테스트 응용 프로그램을 작성 중입니다. 두 번째 당사자의 공개 키를 사용하여 한 당사자의 비밀 키를 내 보낸 다음 두 번째 당사자의 비밀 키로이 비밀 키를 가져 오려고합니다. 이렇게하면 통신용 공유 비밀 키가 설정됩니다. 여기 내 코드입니다 :CryptoAPI에서 키를 내보내는 동안 BAD_UID 오류가 발생했습니다.

if(!CryptExportKey(encryptT->hSymKey, decryptT->hPubKey, SIMPLEBLOB, 0, keyExBuf, &bufLen)) { 
    FormattedDebugPrint(NULL, GetLastError(), "could not export secret key", TRUE); 
    return -1; 
} 
if(!CryptImportKey(decryptT->hCryptProv, keyExBuf, bufLen, decryptT->hPubKey, 0, &(decryptT->hSymKey))) { 
    FormattedDebugPrint(NULL, GetLastError(), "could not import secret key", TRUE); 
    return -1; 
} 

그리고이 오류 제공합니다

공개 키 쌍은 encryptT 및 decryptT (발신자, 수신자) 모두에 대해 생성되는
80090001: Bad UID. 

호출하여 :

CryptGenKey(encryptT->hCryptProv, CALG_RSA_KEYX, CRYPT_EXPORTABLE, &(encryptT->hPubKey)) 

오류의 원인은 무엇입니까?

감사합니다.

+0

encryptT-> hSymKey를 만들고 decryptT-> hPubKey를 가져 오는 방법으로 더 많은 코드를 게시 할 수 있습니까? 인증서에서 hPubKey를 가져 옵니까? 귀하의 오류는이 두 부분의 어딘가에 있습니다. – Oleg

+0

안녕하세요, 응답 주셔서 감사합니다! 예, 공개 키를 PUBLICKEYBLOB에 먼저 내 보낸 다음 수신자의 CSP를 사용하여 가져 오는 일없이 ("발신자"와 "수신자"가 같은 응용 프로그램에 있음) 직접 송신자로부터 공개 키를 가져 왔습니다. – mindthief

답변

0

감사합니다. 기본적으로 다른 공개 키를 직접 사용할 수는 없습니다. 같은 공개 키를 먼저 내 보낸 다음 핸들을 사용하여 상대방의 암호화 공급자에게 가져와야합니다.