Prozedur zum Codieren und Decodieren von Nachrichten
Das Verfahren zum Codieren einer allgemeinen Nachricht lautet wie folgt.
So codieren Sie eine Nachricht
- Initialisieren Sie die entsprechenden Datenstrukturen für den gewünschten Datentyp.
- Rufen Sie CryptMsgOpenToEncode auf, und übergeben Sie die erforderlichen Argumente. Wenn beim Aufrufen von CryptMsgOpenToEncode die Daten, die für CryptMsgUpdate bereitgestellt werden sollen, bereits nachrichtencodiert wurden, übergeben Sie den entsprechenden Objektbezeichner in pszInnerContentObjID (z. B. "1.2.840.113549.1.7.2" für szOID_RSA_signedData). Wenn pszInnerContentObjIDNULL ist, wird davon ausgegangen, dass der innere Inhaltstyp zuvor nicht codiert wurde und entsprechend verarbeitet wird.
- Rufen Sie CryptMsgUpdate so oft wie nötig auf, um die Nachricht abzuschließen. Legen Sie beim letzten Aufruf den Parameter fFinal auf TRUE fest. (Weitere Informationen finden Sie unter CryptMsgUpdate).
- Rufen Sie CryptMsgGetParam auf, um einen Zeiger auf die gewünschten Parameter wie den Inhalt zu erhalten. Verwenden Sie zum Codieren einfacher, allgemeiner Daten CMSG_CONTENT_PARAM für dwParamtype.
- Schließen Sie die Nachricht, indem Sie CryptMsgClose aufrufen.
Diese Prozedur führt zu einer codierten Nachricht eines Typs, der in den Funktionsaufrufen angegeben ist.
Das Verfahren zum Decodieren einer allgemeinen Nachricht lautet wie folgt.
So decodieren Sie eine Nachricht
- Bestimmen Sie mithilfe von CryptMsgCalculateEncodedLength die Länge, die für den Puffer zum Aufnehmen der codierten Daten erforderlich ist.
- Rufen Sie CryptMsgOpenToDecode auf, und übergeben Sie die erforderlichen Argumente. Um die Kompatibilität mit Internet Explorer Version 3.0 zu gewährleisten, wird der dwMsgType-Parameter bereitgestellt. Signierte Daten, die in Internet Explorer 3.0 erstellt wurden, enthalten keine Headerinformationen. Wenn eine solche Nachricht aus Dateisignaturen extrahiert wird, muss der Nachrichtentyp daher an die Funktion übergeben werden. Wenn null an den dwMsgType-Parameter übergeben wird, liest die Funktion den Nachrichtentyp aus dem Header der Nachricht. Wenn der Header fehlt, schlägt der Funktionsaufruf fehl. Bei erfolgreicher Ausführung wird ein Handle für die geöffnete Nachricht zurückgegeben.
- Rufen Sie CryptMsgUpdate einmal auf. Dies bewirkt, dass die entsprechenden Aktionen für die Nachricht ausgeführt werden, je nach Nachrichtentyp.
- Rufen Sie für die zusätzliche Verarbeitung der Nachricht, z. B. zusätzliche Entschlüsselung oder Signaturüberprüfung, CryptMsgControl auf, und übergeben Sie die gewünschte Aktion in dwCtrlType.
- Rufen Sie CryptMsgGetParam auf, um einen Zeiger auf die gewünschten Parameter wie den Inhalt zu erhalten. Verwenden Sie CMSG_CONTENT_PARAM für den dwParamtype-Parameter , um einfache allgemeine Daten zu decodieren.
- Rufen Sie CryptMsgClose auf, um die Nachricht zu schließen.
Ein Beispiel, das diese Schritte implementiert, finden Sie unter Beispiel-C-Programm: Codieren und Decodieren von Daten. Prozeduren und ein Beispiel, das den Prozess der Codierung, Decodierung und Überprüfung der Signatur einer signierten Nachricht veranschaulicht, finden Sie unter Beispiel C-Programm: Signieren, Codieren, Decodieren und Überprüfen einer Nachricht.