Udostępnij przez


EncryptMessage (Schannel), funkcja

Funkcja EncryptMessage (Schannel) szyfruje komunikat w celu zapewnienia prywatności. Funkcja EncryptMessage (Schannel) umożliwia aplikacji wybór spośród algorytmów kryptograficznych obsługiwanych przez wybrany mechanizm. Funkcja EncryptMessage (Schannel) używa kontekstu zabezpieczeń , do których odwołuje się dojście kontekstu kontekstu. Niektóre pakiety nie mają komunikatów do szyfrowania ani odszyfrowywania, ale raczej zapewniają skrót integralności, który można sprawdzić.

W przypadku korzystania z dostawcy SSP Schannel ta funkcja szyfruje komunikaty przy użyciu klucza sesji wynegocjowanego z partią zdalną, która otrzyma komunikat. Algorytm szyfrowania jest określany przez używany zestaw [szyfrowania ](szyfrowania suites-in-schannel.md).

Uwaga

Funkcja EncryptMessage (Schannel) i DecryptMessage (Schannel) może być wywoływana jednocześnie z dwóch różnych wątków w kontekście jednego interfejsu dostawcy obsługi zabezpieczeń (SSPI), jeśli jeden wątek jest szyfrujący, a drugi odszyfrowywać. Jeśli więcej niż jeden wątek jest szyfrowane lub więcej niż jeden wątek jest odszyfrowywać, każdy wątek powinien uzyskać unikatowy kontekst.

Składnia

SECURITY_STATUS SEC_Entry EncryptMessage(
  _In_    PCtxtHandle    phContext,
  _In_    ULONG          fQOP,
  _Inout_ PSecBufferDesc pMessage,
  _In_    ULONG          MessageSeqNo
);

Parametry

phContext [in]

Dojście do kontekstu zabezpieczeń , który ma być używany do szyfrowania komunikatu.

fQOP [in]

Flagi specyficzne dla pakietu wskazujące jakość ochrony. Pakiet zabezpieczeń może użyć tego parametru, aby umożliwić wybór algorytmów kryptograficznych.

Ten parametr może być następującą flagą.

Wartość Znaczenie
SECQOP_WRAP_OOB_DATA
Wyślij komunikat alertu Schannel. W takim przypadku parametr pMessage musi zawierać standardowy dwu bajtowy kod zdarzenia SSL/TLS. Ta wartość jest obsługiwana tylko przez dostawcę SSP Schannel.
Na przykład począwszy od systemu Windows Vista komunikat "hello serwera" wysyłany przez serwer podczas ponownego uwierzytelniania protokołu musi być zaszyfrowany jako alert TLS.

pMessage [in, out]

Wskaźnik do struktury SecBufferDesc . W danych wejściowych struktura odwołuje się do co najmniej jednej struktury SecBuffer . Jednym z nich może być typ SECBUFFER_DATA. Ten bufor zawiera komunikat do zaszyfrowania. Komunikat jest szyfrowany w miejscu, zastępując oryginalną zawartość struktury.

Funkcja nie przetwarza z atrybutem SECBUFFER_READONLY.

Długość struktury SecBuffer , która zawiera komunikat, nie może być większa niż cbMaximumMessage, która jest uzyskiwana z funkcji QueryContextAttributes (Schannel) (SECPKG_ATTR_STREAM_SIZES).

MessageSeqNo [in]

Numer sekwencji przypisany do komunikatu przez aplikację transportu. Jeśli aplikacja transportowa nie obsługuje numerów sekwencji, ten parametr musi mieć wartość zero.

W przypadku korzystania z dostawcy SSP Schannel ten parametr musi być ustawiony na zero. Dostawca SSP Schannel nie używa numerów sekwencji.

Wartość zwracana

Jeśli funkcja powiedzie się, funkcja zwróci SEC_E_OK.

Jeśli funkcja zakończy się niepowodzeniem, zwraca jeden z następujących kodów błędów.

Kod powrotny Opis
SEC_E_BUFFER_TOO_SMALL
Bufor wyjściowy jest za mały. Aby uzyskać więcej informacji zobacz uwagi.
SEC_E_CONTEXT_EXPIRED
Aplikacja odwołuje się do kontekstu, który został już zamknięty. Poprawnie napisana aplikacja nie powinna otrzymać tego błędu.
SEC_E_CRYPTO_SYSTEM_INVALID
Szyfr wybrany dla kontekstu zabezpieczeń nie jest obsługiwany.
SEC_E_INSUFFICIENT_MEMORY
Za mało pamięci, aby ukończyć żądaną akcję.
SEC_E_INVALID_HANDLE
Uchwyt kontekstu, który nie jest prawidłowy, został określony w parametrze phContext .
SEC_E_INVALID_TOKEN
Nie znaleziono bufora typu SECBUFFER_DATA.
SEC_E_QOP_NOT_SUPPORTED
Ani poufność, ani integralność nie są obsługiwane przez kontekst zabezpieczeń.

Uwagi

Funkcja EncryptMessage (Schannel) szyfruje komunikat na podstawie komunikatu i klucza sesji z kontekstu zabezpieczeń.

Jeśli aplikacja transportowa utworzyła kontekst zabezpieczeń do obsługi wykrywania sekwencji, a obiekt wywołujący udostępnia numer sekwencji, funkcja zawiera te informacje z zaszyfrowanym komunikatem. Dołączenie tych informacji chroni przed odtwarzaniem, wstawianiem i pomijaniem komunikatów. Pakiet zabezpieczeń zawiera numer sekwencji przekazywany z aplikacji transportowej.

W przypadku użycia z dostawcą SSP Schannel parametr pMessage musi zawierać strukturę SecBufferDesc z następującymi.

Uwaga

Te muszą być podane w podanej kolejności.

Typ buforu Opis
SECBUFFER_STREAM_HEADER Używane wewnętrznie. Nie jest wymagane inicjowanie.
SECBUFFER_DATA Zawiera komunikat w postaci zwykłego tekstu do zaszyfrowania.
SECBUFFER_STREAM_TRAILER Używane wewnętrznie. Nie jest wymagane inicjowanie.
SECBUFFER_EMPTY Używane wewnętrznie. Nie jest wymagane inicjowanie. Rozmiar może być zerowy.

Jeśli używasz dostawcy SSP Schannel, określ maksymalny rozmiar każdego buforu, wywołując funkcję QueryContextAttributes (Schannel) i określając atrybut SECPKG_ATTR_STREAM_SIZES. Ta funkcja zwraca SecPkgContext_StreamSizes strukturę, której elementy członkowskie zawierają maksymalne rozmiary nagłówka (elementu członkowskiego cbHeader ), komunikat (element członkowski cbMaximumMessage ) i przyczepy (składowa cbTrailer ).

Aby uzyskać optymalną wydajność, struktury pMessage powinny być przydzielane z ciągłej pamięci.

Windows XP/2000: Ta funkcja była również znana jako SealMessage. Aplikacje powinny teraz używać tylko funkcji EncryptMessage (Schannel).

Wymagania

Wymaganie Wartość
Minimalny obsługiwany klient Windows XP [tylko aplikacje klasyczne]
Minimalny obsługiwany serwer Windows Server 2003 [tylko aplikacje klasyczne]
Nagłówek Sspi.h (include Security.h)
Biblioteka Secur32.lib
DLL Secur32.dll

Zobacz też