Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Funkcja DecryptMessage (Ogólne) odszyfrowuje komunikat. Niektóre pakiety nie szyfrują i odszyfrowywają wiadomości, ale wykonują i sprawdzają skrót integralności.
Dostawca obsługi zabezpieczeń szyfrowanych (SSP) zapewnia poufność szyfrowania i odszyfrowywania komunikatów wymienianych między klientem a serwerem jako mechanizmem SASL.
Ta funkcja jest również używana z dostawcą SSP Schannel do sygnalizatora żądania od nadawcy komunikatów na potrzeby ponownego negocjowania (ponownego) atrybutów połączenia lub zamknięcia połączenia.
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 |
---|---|
DecryptMessage (skrót) | Odszyfrowuje komunikat przy użyciu skrótu. |
DecryptMessage (Kerberos) | Odszyfrowuje komunikat przy użyciu protokołu Kerberos. |
DecryptMessage (Negocjuj) | Odszyfrowuje komunikat przy użyciu metody Negotiate. |
Odszyfrowywanie wiadomości (NTLM) | Odszyfrowuje komunikat przy użyciu protokołu NTLM. |
DecryptMessage (Schannel) | Odszyfrowuje komunikat przy użyciu protokołu Schannel. |
Składnia
SECURITY_STATUS SEC_Entry DecryptMessage(
_In_ PCtxtHandle phContext,
_Inout_ PSecBufferDesc pMessage,
_In_ ULONG MessageSeqNo,
_Out_ PULONG pfQOP
);
Parametry
-
phContext [w]
-
Dojście do kontekstu zabezpieczeń , który ma być używany do odszyfrowania wiadomości.
-
pMessage [wejście, wyjście]
-
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 zaszyfrowany komunikat. Zaszyfrowana wiadomość jest odszyfrowywane, zastępując oryginalną zawartość buforu.
W przypadku korzystania z dostawcy SSP skrótu w danych wejściowych struktura odwołuje się do co najmniej jednej struktury SecBuffer . Jeden z nich musi być typu SECBUFFER_DATA lub SECBUFFER_STREAM i musi zawierać zaszyfrowany komunikat.
W przypadku korzystania z dostawcy SSP Schannel z kontekstami, które nie są zorientowane na połączenie, w danych wejściowych struktura musi zawierać cztery struktury SecBuffer . Dokładnie jeden bufor musi być typu SECBUFFER_DATA i zawiera zaszyfrowany komunikat, który jest odszyfrowywane. Pozostałe są używane na potrzeby danych wyjściowych i muszą być typu SECBUFFER_EMPTY. W przypadku kontekstów zorientowanych na połączenie należy podać bufor typu SECBUFFER_DATA, jak określono dla kontekstów niezwiązanych z połączeniem. Ponadto należy podać drugi bufor typu SECBUFFER_TOKEN zawierający token zabezpieczający.
-
MessageSeqNo [w]
-
Numer sekwencji oczekiwany przez aplikację transportu, jeśli istnieje. Jeśli aplikacja transportowa nie obsługuje numerów sekwencji, ten parametr musi być ustawiony na 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.
-
pfQOP [wyjście]
-
Wskaźnik do zmiennej typu ULONG , która odbiera flagi specyficzne dla pakietu, które wskazują jakość ochrony.
W przypadku korzystania z dostawcy SSP Schannel ten parametr nie jest używany i powinien być ustawiony na wartość NULL.
Ten parametr może być jedną z następujących flag.
Wartość Znaczenie SECQOP_WRAP_NO_ENCRYPT Wiadomość nie została zaszyfrowana, ale utworzono nagłówek lub przyczepę.
Nuta: KERB_WRAP_NO_ENCRYPT ma tę samą wartość i to samo znaczenie.- SIGN_ONLY
W przypadku korzystania z dostawcy SSP skrótu użyj tej flagi, gdy kontekst zabezpieczeń jest ustawiony, aby zweryfikować tylko podpis . Aby uzyskać więcej informacji, zobacz Jakość ochrony.
Wartość zwracana
Jeśli funkcja sprawdza, czy komunikat został odebrany w odpowiedniej sekwencji, funkcja zwraca SEC_E_OK.
Jeśli funkcja nie może odszyfrować komunikatu, zwraca jeden z następujących kodów błędów.
Kod powrotny | Opis |
---|---|
|
Bufor komunikatów jest za mały. Używany z dostawcą SSP skrótu. |
|
Szyfr wybrany dla kontekstu zabezpieczeń nie jest obsługiwany. Używany z dostawcą SSP skrótu. |
|
Dane w buforze wejściowym są niekompletne. Aplikacja musi odczytać więcej danych z serwera i ponownie wywołać DecryptMessage (General). |
|
Uchwyt kontekstu, który nie jest prawidłowy, został określony w parametrze phContext . Używane z dostawcami SSPs funkcji Digest i Schannel. |
|
są nieprawidłowego typu lub nie znaleziono buforu typu SECBUFFER_DATA. Używany z dostawcą SSP Schannel. |
|
Wiadomość została zmieniona. Używane z dostawcami SSPs funkcji Digest i Schannel. |
|
Komunikat nie został odebrany w prawidłowej kolejności. |
|
Ani poufność, ani integralność nie są obsługiwane przez kontekst zabezpieczeń. Używany z dostawcą SSP skrótu. |
|
Nadawca komunikatu zakończył korzystanie z połączenia i zainicjował zamknięcie. Aby uzyskać informacje na temat inicjowania lub rozpoznawania zamknięcia, zobacz Zamykanie połączenia Schannel. Używany z dostawcą SSP Schannel. |
|
Strona zdalna wymaga nowej sekwencji uzgadniania lub aplikacja właśnie zainicjowała zamknięcie. Wróć do pętli negocjacji i wywołaj metodę AcceptSecurityContext (General) lub InitializeSecurityContext (Ogólne), przekazując puste wejściowe. Jeśli funkcja zwraca bufor typu SEC_BUFFER_EXTRA, powinno to zostać przekazane do funkcji AcceptSecurityContext (Ogólne) jako buforu wejściowego. Używany z dostawcą SSP Schannel. Renegocjacja nie jest obsługiwana w trybie jądra Schannel. Obiekt wywołujący powinien zignorować tę wartość zwracaną lub zamknąć połączenie. Jeśli wartość jest ignorowana, klient lub serwer może w rezultacie zamknąć połączenie. |
Uwagi
Gdy używasz dostawcy SSP Schannel, funkcja DecryptMessage (Ogólne) zwraca SEC_I_CONTEXT_EXPIRED, gdy nadawca komunikatu zamknął połączenie. Aby uzyskać informacje na temat inicjowania lub rozpoznawania zamknięcia, zobacz Zamykanie połączenia Schannel.
Jeśli używasz dostawcy SSP Schannel, funkcja DecryptMessage (ogólne) zwraca SEC_I_RENEGOTIATE, gdy nadawca komunikatu chce renegocjować połączenie (kontekst zabezpieczeń). Aplikacja obsługuje żądaną renegocjację przez wywołanie metody AcceptSecurityContext (Ogólne) ( po stronie serwera) lub InitializeSecurityContext (ogólne) (po stronie klienta) i przekazanie pustych wejściowych. Gdy to początkowe wywołanie zwróci wartość, kontynuuj tak, jakby aplikacja tworzyła nowe połączenie. Aby uzyskać więcej informacji, zobacz [Tworzenie kontekstu zabezpieczeń Schannel](creating-an-schannel-security-context.md).
Aby uzyskać informacje na temat współdziałania z interfejsem GSSAPI, zobacz SSPI/Kerberos Interoperability with GSSAPI (Współdziałanie interfejsu SSPI/Kerberos z interfejsem GSSAPI).
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 |
|
Zobacz też