Udostępnij przez


EncryptMessage (Digest), funkcja

Funkcja EncryptMessage (Digest) szyfruje komunikat w celu zapewnienia prywatności. Funkcja EncryptMessage (skrót) umożliwia aplikacji wybór spośród algorytmów kryptograficznych obsługiwanych przez wybrany mechanizm. Funkcja EncryptMessage (Digest) 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ć.

Ta funkcja jest dostępna tylko jako mechanizm SASL.

Uwaga

Funkcja EncryptMessage (Skrót) i DecryptMessage (Skrót) 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(
  PCtxtHandle    phContext,
  unsigned long  fQOP,
  PSecBufferDesc pMessage,
  unsigned long  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.

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

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 (Digest) 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 SSP skrótu, pobierz rozmiar buforu wyjściowego, wywołując funkcję QueryContextAttributes (Digest) 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 .

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 funkcji EncryptMessage (szyfrowane).

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ż

funkcji SSPI

AcceptSecurityContext (skrót)

DecryptMessage (skrót)

InitializeSecurityContext (Skrót)

Atrybuty QueryContextAttributes (skrót)

SecBuffer

SecBufferDesc