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 (Ogólne) szyfruje komunikat w celu zapewnienia prywatności. Funkcja EncryptMessage (ogólne) umożliwia aplikacji wybór spośród algorytmów kryptograficznych obsługiwanych przez wybrany mechanizm. Funkcja EncryptMessage (Ogólne) używa kontekstu zabezpieczeń , do których odwołuje się do uchwytu 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 obsługi zabezpieczeń skrótów (SSP) ta funkcja jest dostępna tylko jako mechanizm SASL.
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 (Ogólne) i DecryptMessage (ogólne) 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.
Aby uzyskać informacje o korzystaniu z tej funkcji z określonym dostawcą usług udostępnionych, zobacz następujące tematy.
| Temat | Opis |
|---|---|
| EncryptMessage (skrót) | Szyfruje komunikat w celu zapewnienia prywatności przy użyciu skrótu. |
| EncryptMessage (Kerberos) | Szyfruje komunikat w celu zapewnienia prywatności przy użyciu protokołu Kerberos. |
| EncryptMessage (Negocjuj) | Szyfruje komunikat w celu zapewnienia prywatności przy użyciu negocjowania. |
| EncryptMessage (NTLM) | Szyfruje komunikat w celu zapewnienia prywatności przy użyciu protokołu NTLM. |
| EncryptMessage (Schannel) | Szyfruje komunikat w celu zapewnienia prywatności przy użyciu kanału Schannel. |
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.
W przypadku korzystania z dostawcy usług udostępnionych skrótów ten parametr musi być ustawiony na zero.
Ten parametr może być jedną z następujących flag.
| Wartość | Znaczenie |
|---|---|
|
SECQOP_WRAP_NO_ENCRYPT |
Utwórz nagłówek lub przyczepę, ale nie szyfruj wiadomości. Nuta: KERB_WRAP_NO_ENCRYPT ma tę samą wartość i to samo 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. |
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 (General) (SECPKG_ATTR_STREAM_SIZES).
W przypadku korzystania z dostawcy SSP skrótu musi istnieć drugi bufor typu SECBUFFER_PADDING lub SEC_BUFFER_DATA do przechowywania informacji o podpisie . Aby uzyskać rozmiar buforu wyjściowego, wywołaj funkcję QueryContextAttributes (Ogólne) i określ SECPKG_ATTR_SIZES. Funkcja zwróci strukturę SecPkgContext_Sizes . Rozmiar buforu wyjściowego jest sumą wartości w elementach członkowskich cbMaxSignature i cbBlockSize .
Aplikacje, które nie korzystają z protokołu SSL, muszą dostarczyć secBuffer typu SECBUFFER_PADDING.
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 usług udostępnionych skrótów ten parametr musi być ustawiony na zero. Skrót dostawcy usług udostępnionych zarządza numerowaniem sekwencji wewnętrznie.
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 (Ogólne) 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.
Jeśli używasz dostawcy usług udostępnionych skrótów, pobierz rozmiar buforu wyjściowego, wywołując funkcję QueryContextAttributes (Ogólne) i określając SECPKG_ATTR_SIZES. Funkcja zwróci strukturę SecPkgContext_Sizes . Rozmiar buforu wyjściowego jest sumą wartości w elementach członkowskich cbMaxSignature i cbBlockSize .
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 (Ogólne) 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 (ogólne).
Wymagania
| Wymaganie | Wartość |
|---|---|
| Minimalny obsługiwany klient | Windows XP [tylko aplikacje klasyczne] |
| Minimalny obsługiwany serwer | Windows Server 2003 [tylko aplikacje klasyczne] |
| Nagłówek |
|
| Biblioteka |
|
| DLL |
|