Freigeben über


CryptDecodeMessage-Funktion (wincrypt.h)

Die CryptDecodeMessage-Funktion decodiert, entschlüsselt und überprüft eine kryptografische Nachricht.

Diese Funktion kann verwendet werden, wenn der Typ der kryptografischen Nachricht unbekannt ist. Die dwMsgTypeFlags-Konstanten können mit einem bitweisen OR-Vorgang kombiniert werden, sodass die Funktion versucht, einen der Typen zu finden. Wenn einer der Typen gefunden wird, meldet die Funktion den gefundenen Typ und gibt die für diesen Typ geeigneten Daten zurück.

In jedem Durchlauf durchbricht die Funktion nur eine einzelne Verschlüsselungs- oder Codierungsebene. Für zusätzliches Cracking muss diese Funktion oder eine der anderen vereinfachten Nachrichtenfunktionen erneut aufgerufen werden.

Syntax

BOOL CryptDecodeMessage(
  [in]                DWORD                       dwMsgTypeFlags,
  [in]                PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
  [in]                PCRYPT_VERIFY_MESSAGE_PARA  pVerifyPara,
  [in]                DWORD                       dwSignerIndex,
  [in]                const BYTE                  *pbEncodedBlob,
  [in]                DWORD                       cbEncodedBlob,
  [in]                DWORD                       dwPrevInnerContentType,
  [out, optional]     DWORD                       *pdwMsgType,
  [out, optional]     DWORD                       *pdwInnerContentType,
  [out, optional]     BYTE                        *pbDecoded,
  [in, out, optional] DWORD                       *pcbDecoded,
  [out, optional]     PCCERT_CONTEXT              *ppXchgCert,
  [out, optional]     PCCERT_CONTEXT              *ppSignerCert
);

Parameter

[in] dwMsgTypeFlags

Gibt den Typ der Nachricht an: Nachrichtentypen können mit dem bitweisen OR-Operator kombiniert werden. Dieser Parameter kann einer der folgenden Nachrichtentypen sein:

  • CMSG_DATA_FLAG
  • CMSG_SIGNED_FLAG
  • CMSG_ENVELOPED_FLAG
  • CMSG_SIGNED_AND_ENVELOPED_FLAG
  • CMSG_HASHED_FLAG
Hinweis Nach der Rückgabe wird der DWORD-Wert , auf den pdwMsgType verweist, mit dem Typ der Nachricht festgelegt.
 

[in] pDecryptPara

Ein Zeiger auf eine CRYPT_DECRYPT_MESSAGE_PARA-Struktur , die Entschlüsselungsparameter enthält.

[in] pVerifyPara

Ein Zeiger auf eine CRYPT_VERIFY_MESSAGE_PARA Struktur, die Überprüfungsparameter enthält.

[in] dwSignerIndex

Gibt an, welcher Unterzeichner unter den möglichen vielen Unterzeichnern einer Nachricht überprüft werden soll. Dieser Index kann in mehreren Aufrufen der Funktion geändert werden, um zusätzliche Signierer zu überprüfen.

dwSignerIndex ist für den ersten Signierer auf 0 festgelegt. Wenn die Funktion FALSE und GetLastError CRYPT_E_NO_SIGNER zurückgibt, hat der vorherige Aufruf den letzten Unterzeichner der Nachricht zurückgegeben. Dieser Parameter wird nur für Nachrichten vom Typ CMSG_SIGNED_AND_ENVELOPED oder CMSG_SIGNED verwendet. Für alle anderen Nachrichtentypen sollte er auf 0 festgelegt werden.

[in] pbEncodedBlob

Ein Zeiger auf das codierte BLOB , das decodiert werden soll.

[in] cbEncodedBlob

Die Größe des codierten BLOB in Bytes.

[in] dwPrevInnerContentType

Gilt nur für die Verarbeitung geschachtelter kryptografischer Nachrichten. Bei der Verarbeitung einer äußeren kryptografischen Nachricht muss sie auf Null festgelegt werden. Beim Decodieren einer geschachtelten kryptografischen Nachricht wird sie auf den Wert festgelegt, der bei pdwInnerContentType durch einen vorherigen Aufruf von CryptDecodeMessage für die äußere Nachricht zurückgegeben wird. Dabei kann es sich um einen der in pdwMsgType aufgeführten CMSG-Typen handeln. Legen Sie dwPrevInnerContentType aus Gründen der Abwärtskompatibilität auf Null fest.

[out, optional] pdwMsgType

Ein Zeiger auf einen DWORD-Wert , der den zurückgegebenen Nachrichtentyp angibt. Dieser Parameter kann einer der folgenden Nachrichtentypen sein:

  • CMSG_DATA
  • CMSG_SIGNED
  • CMSG_ENVELOPED
  • CMSG_SIGNED_AND_ENVELOPED
  • CMSG_HASHED

[out, optional] pdwInnerContentType

Ein Zeiger auf ein DWORD , das den Typ einer inneren Nachricht angibt. Die für pdwMsgType verwendeten Nachrichtentypcodes werden auch hier verwendet.

Wenn keine kryptografische Schachtelung vorhanden ist, wird CMSG_DATA zurückgegeben.

[out, optional] pbDecoded

Ein Zeiger auf einen Puffer, um die decodierte Nachricht zu empfangen.

Dieser Parameter kann NULL sein, wenn die decodierte Nachricht nicht erforderlich ist oder um die Größe der decodierten Nachricht für Speicherzuweisungszwecke festzulegen. Eine decodierte Nachricht wird nicht zurückgegeben, wenn dieser Parameter NULL ist. Weitere Informationen finden Sie unter Abrufen von Daten unbekannter Länge.

[in, out, optional] pcbDecoded

Ein Zeiger auf eine Variable, die die Größe des Puffers in Bytes angibt, auf den der pbDecoded-Parameter verweist. Wenn die Funktion zurückgibt, enthält diese Variable die Größe der decodierten Nachricht.

Hinweis Bei der Verarbeitung der im Puffer zurückgegebenen Daten müssen Anwendungen die tatsächliche Größe der zurückgegebenen Daten verwenden. Die tatsächliche Größe kann etwas kleiner sein als die Größe des Puffers, der bei der Eingabe angegeben wird. (Bei der Eingabe werden Puffergrößen normalerweise groß genug angegeben, um sicherzustellen, dass die größtmöglichen Ausgabedaten in den Puffer passen.) Bei der Ausgabe wird die Variable aktualisiert, auf die dieser Parameter verweist, um die tatsächliche Größe der in den Puffer kopierten Daten widerzuspiegeln.
 

[out, optional] ppXchgCert

Ein Zeiger auf einen Zeiger auf eine CERT_CONTEXT-Struktur mit einem Zertifikat, das dem privaten Exchange-Schlüssel entspricht, der zum Decodieren der Nachricht benötigt wird. Dieser Parameter ist nur für Nachrichtentypen CMSG_ENVELOPED und CMSG_SIGNED_AND_ENVELOPED festgelegt.

[out, optional] ppSignerCert

Ein Zeiger auf einen Zeiger auf eine CERT_CONTEXT Struktur des Zertifikatkontexts des Signierers. Dieser Parameter ist nur für Nachrichtentypen CMSG_SIGNED und CMSG_SIGNED_AND_ENVELOPED festgelegt.

Rückgabewert

Wenn die Funktion erfolgreich ist, gibt die Funktion nonzero (TRUE) zurück.

Wenn die Funktion fehlschlägt, gibt sie null (FALSE) zurück. Rufen Sie GetLastError auf, um erweiterte Fehlerinformationen zu erhalten.

Die Funktionen CryptDecryptMessage, CryptVerifyMessageSignature oder CryptVerifyMessageHash können an diese Funktion weitergegeben werden.

Der folgende Fehlercode wird am häufigsten von der GetLastError-Funktion zurückgegeben.

Rückgabecode Beschreibung
ERROR_MORE_DATA
Wenn der vom pbDecoded-Parameter angegebene Puffer nicht groß genug ist, um die zurückgegebenen Daten aufzunehmen, legt die Funktion den ERROR_MORE_DATA Code fest und speichert die erforderliche Puffergröße in Bytes in der Variablen, auf die von pcbDecoded verwiesen wird.

Hinweise

Der dwMsgTypeFlags-Parameter gibt den Satz zulässiger Nachrichten an. Um beispielsweise signierte oder ENVELOPED-Nachrichten zu decodieren, legen Sie dwMsgTypeFlags auf CMSG_SIGNED_FLAG | CMSG_ENVELOPED_FLAG. Entweder oder beide parameter pDecryptPara oder pVerifyPara müssen angegeben werden.

Bei einer erfolgreich decodierten oder überprüften Nachricht werden die Zertifikatkontextzeiger aktualisiert, auf die von ppXchgCert und ppSignerCert verwiesen wird. Sie müssen durch Aufrufen von CertFreeCertificateContext freigegeben werden. Wenn die Funktion fehlschlägt, werden sie auf NULL festgelegt.

Die Parameter ppXchgCert oder ppSignerCert können auf NULL festgelegt werden, bevor die Funktion aufgerufen wird. Dies bedeutet, dass der Aufrufer nicht daran interessiert ist, das Exchange-Zertifikat oder den Signerzertifikatkontext abzurufen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile wincrypt.h
Bibliothek Crypt32.lib
DLL Crypt32.dll

Weitere Informationen

CryptDecryptMessage

CryptVerifyMessageHash

CryptVerifyMessageSignature

Vereinfachte Nachrichtenfunktionen