Ich habe dieses Tutorial für SSL/TLS online verfolgt (naja, es ist mehr davon, den Quellcode der Jungs zu lesen und zu folgen), aber ich bin mit diesem EncryptMessage-Teil ziemlich holprig es schiebt die Daten aus dem Weg und verschlüsselt die falschen Informationen.C++ - EncryptMessage verschlüsselt nicht die richtigen Daten
Die pbloBuffer, dass ich es senden ist:
GET/HTTP/1.1\r\n
HOST: www.google.com\r\n\r\n
Aber wenn ich pbMessage = pbloBuffer + Sizes.cbHeader; Ich am Ende mit (auch der Microsoft-Website sagt, dies zu tun)
1\r\n
HOST: www.google.com\r\n\r\n
Jetzt pbMessage der obige Code ist, und das ist unter SECBUFFER_DATA eingesetzt, so ist es nicht einmal die vollen Daten zu bekommen. Soweit ich weiß, sind SECBUFFER_DATA die "Benutzer" -Daten, die der Webserver entschlüsseln und verarbeiten wird.
Können Sie herausfinden, wie Sie dies beheben und die verschlüsselten Daten ordnungsgemäß senden?
Voll Quelle: (Dieser Code ist experimentell, wie ich es verstehe ich versucht, bevor ich Änderungen vornimmt)
int Adaptify::EncryptSend(PBYTE pbloBuffer, int Size) {
SECURITY_STATUS scRet{ 0 };
SecBufferDesc Message{ 0 };
SecBuffer Buffers[4]{ 0 };
DWORD cbMessage = 0, cbData = 0;
PBYTE pbMessage = nullptr;
SecPkgContext_StreamSizes Sizes = { 0 };
QueryContextAttributesW(&hContext, SECPKG_ATTR_STREAM_SIZES, &Sizes);
pbMessage = pbloBuffer + Sizes.cbHeader;
cbMessage = (DWORD)strlen((const char*)pbMessage);
Buffers[0].BufferType = SECBUFFER_STREAM_HEADER;
Buffers[0].cbBuffer = Sizes.cbHeader;
Buffers[0].pvBuffer = pbloBuffer;
Buffers[1].BufferType = SECBUFFER_DATA;
Buffers[1].pvBuffer = pbMessage;
Buffers[1].cbBuffer = cbMessage;
Buffers[2].BufferType = SECBUFFER_STREAM_TRAILER;
Buffers[2].cbBuffer = Sizes.cbTrailer;
Buffers[2].pvBuffer = pbMessage + cbMessage;
Buffers[3].BufferType = SECBUFFER_EMPTY;
Buffers[3].cbBuffer = SECBUFFER_EMPTY;
Buffers[3].pvBuffer = SECBUFFER_EMPTY;
Message.cBuffers = 4;
Message.pBuffers = Buffers;
Message.ulVersion = SECBUFFER_VERSION;
scRet = EncryptMessage(&hContext, 0, &Message, 0);
if (send(hSocket, (const char*)pbloBuffer, Buffers[0].cbBuffer + Buffers[1].cbBuffer + Buffers[2].cbBuffer, 0) < 0) {
MessageBox(0, L"Send error", 0, 0);
}
return 0;
}
Danke! (I Ich las den Quelltext der Jungs durch und fand heraus, dass er alles umschaltet, bevor er die SendEncrypt-Funktion aufruft. Ich schätze Ihre Hilfe. –