Dela via


Funktionen EncryptMessage (Digest)

Funktionen EncryptMessage (Digest) krypterar ett meddelande för att tillhandahålla sekretess. EncryptMessage (Digest) gör att programmet kan välja bland kryptografiska algoritmer som stöds av den valda mekanismen. Funktionen EncryptMessage (Digest) använder säkerhetskontexten som refereras av kontexthandtaget. Vissa paket har inte meddelanden som ska krypteras eller dekrypteras, utan ger i stället en integritetshash som kan kontrolleras.

Den här funktionen är endast tillgänglig som en SASL-mekanism.

Anmärkning

EncryptMessage (Digest) och DecryptMessage (Digest) kan anropas samtidigt från två olika trådar i en enda SSPI-kontext ( Security Support Provider Interface ) om en tråd krypteras och den andra dekrypterar. Om mer än en tråd krypteras, eller om mer än en tråd dekrypterar, bör varje tråd få en unik kontext.

 

Syntax

SECURITY_STATUS SEC_ENTRY EncryptMessage(
  PCtxtHandle    phContext,
  unsigned long  fQOP,
  PSecBufferDesc pMessage,
  unsigned long  MessageSeqNo
);

Parameterar

phContext [in]

En referens till säkerhetskontexten som ska användas för att kryptera meddelandet.

fQOP [in]

Paketspecifika flaggor som anger skyddets kvalitet. Ett säkerhetspaket kan använda den här parametern för att aktivera valet av kryptografiska algoritmer.

När du använder Digest SSP måste den här parametern vara inställd på noll.

pMessage [in, out]

En pekare till en SecBufferDesc-struktur . Vid indata refererar strukturen till en eller flera SecBuffer-strukturer som kan vara av typen SECBUFFER_DATA. Bufferten innehåller meddelandet som ska krypteras. Meddelandet krypteras på plats och skriver över det ursprungliga innehållet i strukturen.

Funktionen bearbetar inte buffertar med attributet SECBUFFER_READONLY.

Längden på den SecBuffer-struktur som innehåller meddelandet får inte vara större än cbMaximumMessage, som hämtas från funktionen QueryContextAttributes (Digest) (SECPKG_ATTR_STREAM_SIZES).

När du använder Digest SSP måste det finnas en andra buffert av typen SECBUFFER_PADDING eller SEC_BUFFER_DATA för att lagra signaturinformation . Om du vill hämta storleken på utdatabufferten anropar du funktionen QueryContextAttributes (Digest) och anger SECPKG_ATTR_SIZES. Funktionen returnerar en SecPkgContext_Sizes struktur. Storleken på utdatabufferten är summan av värdena i cbMaxSignature - och cbBlockSize-medlemmarna .

Program som inte använder SSL måste ange en SecBuffer av typen SECBUFFER_PADDING.

MessageSeqNo [in]

Sekvensnumret som transportprogrammet tilldelade meddelandet. Om transportprogrammet inte underhåller sekvensnummer måste den här parametern vara noll.

När du använder Digest SSP måste den här parametern vara inställd på noll. Digest SSP hanterar sekvensnumrering internt.

Returvärde

Om funktionen lyckas returnerar funktionen SEC_E_OK.

Om funktionen misslyckas returneras någon av följande felkoder.

Returkod Beskrivning
SEC_E_BUFFER_TOO_SMALL
Utdatabufferten är för liten. Mer information finns i Anmärkningar.
SEC_E_CONTEXT_EXPIRED
Programmet refererar till en kontext som redan har stängts. Ett korrekt skrivet program bör inte få det här felet.
SEC_E_CRYPTO_SYSTEM_INVALID
Det chiffer som valts för säkerhetskontexten stöds inte.
SEC_E_INSUFFICIENT_MEMORY
Det finns inte tillräckligt med minne för att slutföra den begärda åtgärden.
SEC_E_INVALID_HANDLE
En kontextreferens som inte är giltig angavs i parametern phContext .
SEC_E_INVALID_TOKEN
Det gick inte att hitta någon buffert av typen SECBUFFER_DATA.
SEC_E_QOP_NOT_SUPPORTED
Varken konfidentialitet eller integritet stöds av säkerhetskontexten.

 

Anmärkningar

Funktionen EncryptMessage (Digest) krypterar ett meddelande baserat på meddelandet och sessionsnyckeln från en säkerhetskontext.

Om transportprogrammet skapade säkerhetskontexten för att stödja sekvensidentifiering och anroparen tillhandahåller ett sekvensnummer, innehåller funktionen den här informationen med det krypterade meddelandet. Inklusive den här informationen skyddar mot repris, infogning och undertryckning av meddelanden. Säkerhetspaketet innehåller sekvensnumret som skickas från transportprogrammet.

När du använder Digest SSP hämtar du storleken på utdatabufferten genom att anropa funktionen QueryContextAttributes (Digest) och ange SECPKG_ATTR_SIZES. Funktionen returnerar en SecPkgContext_Sizes struktur. Storleken på utdatabufferten är summan av värdena i cbMaxSignature - och cbBlockSize-medlemmarna .

Anmärkning

Dessa buffertar måste anges i den ordning som visas.

 

Bufferttyp Beskrivning
SECBUFFER_STREAM_HEADER
Används internt. Ingen initiering krävs.
SECBUFFER_DATA
Innehåller det klartextmeddelande som ska krypteras.
SECBUFFER_STREAM_TRAILER
Används internt. Ingen initiering krävs.
SECBUFFER_EMPTY
Används internt. Ingen initiering krävs. Storleken kan vara noll.

 

För optimala prestanda bör pMessage-strukturerna allokeras från sammanhängande minne.

Windows XP: Den här funktionen kallades även SealMessage. Program bör nu endast använda EncryptMessage (Digest).

Krav

Krav Värde
Lägsta klient som stöds
Windows XP [endast skrivbordsappar]
Lägsta server som stöds
Windows Server 2003 [endast skrivbordsappar]
Header
Sspi.h (inkludera Security.h)
Bibliotek
Secur32.lib
DLL
Secur32.dll

Se även

SSPI Functions

AcceptSecurityContext (Sammanfattad)

DekrypteraMessage (Sammandrag)

InitializeSecurityContext (Sammanfattad)

QueryContextAttributes (Sammandrag)

SecBuffer

SecBufferDesc