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
[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.
[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 |
---|---|
|
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 |