Udostępnij przez


EncryptMessage (NTLM), funkcja

Funkcja EncryptMessage (NTLM) szyfruje komunikat w celu zapewnienia prywatności. Funkcja EncryptMessage (NTLM) umożliwia aplikacji wybór spośród algorytmów kryptograficznych obsługiwanych przez wybrany mechanizm. Funkcja EncryptMessage (NTLM) używa kontekstu zabezpieczeń , do których odwołuje się uchwyt 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ć.

Uwaga

Funkcja EncryptMessage (NTLM) i DecryptMessage (NTLM) 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 odszyfrowuje. 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_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.

pMessage [in, out]

Wskaźnik do struktury SecBufferDesc . W danych wejściowych struktura odwołuje się do co najmniej jednej struktury SecBuffer , która może być typu 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 (NTLM) (SECPKG_ATTR_STREAM_SIZES).

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.

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 (NTLM) 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.

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.

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

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

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ż