현재 Windows 암호화 API를 실험 중이며 공개 키 암호화와 관련된 몇 가지 문제가 있습니다. 항목을 암호화하는 방법에 대한 많은 예제가 있지만 처음부터 끝까지 공개 키 모델을 직접 처리하는 것은 없습니다.WinCrypt에서 공개 키 암호화를 생성하고 사용하는 방법
여기에 내 현재 코드는 암호화 키 쌍을 생성하기 위해 어떻게 보이는지의 대략적인 윤곽이, 난 가독성을 위해 코드를 검사 오류를 제거했습니다
// MAKE AN RSA PUBLIC/PRIVATE KEY:
CryptGenKey(hProv, CALG_RSA_KEYX, CRYPT_EXPORTABLE, &hKey);
// NOW LET'S EXPORT THE PUBLIC KEY:
DWORD keylen;
CryptExportKey(hKey,0,PUBLICKEYBLOB,0,NULL,&keylen);
LPBYTE KeyBlob;
KeyBlob = (LPBYTE)malloc(keylen);
CryptExportKey(hKey,NULL,PUBLICKEYBLOB,0,KeyBlob,&keylen);
ofstream outputkey;
outputkey.open("TestPublicKey.txt", ios_base::out | ios_base::binary);
for(size_t i=0; i < keylen; ++i)
outputkey<<KeyBlob[i];
outputkey.close();
free(KeyBlob);
// NOW LET'S EXPORT THE PRIVATE KEY:
CryptExportKey(hKey, 0, PRIVATEKEYBLOB,0,NULL,&keylen);
KeyBlob = (LPBYTE)malloc(keylen);
CryptExportKey(hKey,NULL,PRIVATEKEYBLOB,0,KeyBlob,&keylen)
outputkey.open("TestPrivateKey.txt", ios_base::out | ios_base::binary);
for(size_t i=0;i<keylen;++i)
outputkey<<KeyBlob[i];
outputkey.close();
free(KeyBlob);
// ENCRYPT A (SHORT) TEST MESSAGE [SHOULD JUST BE ANOTHER ALG'S KEY LATER]:
DWORD encryptBufferLen=0;
CryptEncrypt(hKey, 0, true, 0, NULL, &encryptBufferLen, 0); // how much space?
BYTE* encryptionBuffer = (BYTE*)malloc(encryptBufferLen);
memcpy(encryptionBuffer, TestMessage, TestMessageLen); // move for in-place-encrypt
CryptEncrypt(hKey,0,true,0, encryptionBuffer, &bufferlen, encryptBufferLen);
ofstream message;
message.open("Message.txt", ios_base::out | ios_base::binary);
for(size_t i=0;i<encryptBufferLen;++i)
message<<encryptionBuffer[i];
message.close();
내 두 개의 수출 키가 다르지만, 둘 다 할 수 있습니다 다른 키가로드되지 않고 메시지를 해독합니다. 또한 내 보낸 공개 키를로드하는 새 세션에서 새 메시지를 암호화하는 경우에도 두 키 중 하나를 사용하여 해당 메시지를 해독 할 수 있습니다.
내가 잘못했거나 누락 된 부분에 대해 조언 해 줄 사람이 있습니까? 나는 완전히 잘못된 길을 가고 있는가?
덧글 1 : 나는이 주석을 정말로 이해하지 못합니다. 공개 키와 비공개 키를 모두 사용하여 암호화하고 싶습니다. (전통적으로 공개 키를 사용하여 '키 소유자'에게 보내고 개인 키 소유자와 마찬가지로 '서명'). # 2/# 3은 괜찮지 만 다소 관련성이 없습니다. 키에 원시 액세스를 원하지만 표준 메시지 교환에는 암호화를 사용하지 않고 공용/개인 암호화의 다른 측면을 활용합니다. 요점은 - 공개 키/개인 키 중 하나를 적절히 해독 할 수없는 이유는 무엇입니까? – Tom
@Tom, 다음 게시물이 도움이 될 수 있습니다. http://stackoverflow.com/questions/3121740/decrypt-data-using-an-rsa-public-key – Raj