Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 |
|---|---|
|
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 |
|---|---|
|
Bufor wyjściowy jest za mały. Aby uzyskać więcej informacji zobacz uwagi. |
|
Aplikacja odwołuje się do kontekstu, który został już zamknięty. Poprawnie napisana aplikacja nie powinna otrzymać tego błędu. |
|
Szyfr wybrany dla kontekstu zabezpieczeń nie jest obsługiwany. |
|
Za mało pamięci, aby ukończyć żądaną akcję. |
|
Uchwyt kontekstu, który nie jest prawidłowy, został określony w parametrze phContext . |
|
Nie znaleziono bufora typu SECBUFFER_DATA. |
|
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 |