Freigeben über


Decodieren von umhüllten Daten

Die allgemeinen Aufgaben, die zum Decodieren einer umhüllten Nachricht erforderlich sind, werden in der folgenden Abbildung dargestellt und in der darauf folgenden Liste beschrieben.

Decodieren von umhüllten Daten

Die Abfolge von Ereignissen zum Decodieren von umhüllten Daten mithilfe der Schlüsseltransportschlüsselverwaltung, wie in der vorherigen Abbildung dargestellt, sieht wie folgt aus:

  • Ein Zeiger auf die digital umhüllte Nachricht wird abgerufen.
  • Ein Zertifikatspeicher wird geöffnet.
  • Aus der Nachricht wird die Empfänger-ID (Meine ID) abgerufen.
  • Die Empfänger-ID wird zum Abrufen des Zertifikats verwendet.
  • Der private Schlüssel , der diesem Zertifikat zugeordnet ist, wird abgerufen.
  • Der private Schlüssel wird verwendet, um den symmetrischen Schlüssel (Sitzungsschlüssel) zu entschlüsseln.
  • Der Verschlüsselungsalgorithmus wird aus der Nachricht abgerufen.
  • Mithilfe des privaten Schlüssels und des Verschlüsselungsalgorithmus werden die Daten entschlüsselt.

Das folgende Verfahren verwendet Nachrichtenfunktionen auf niedriger Ebene, um die soeben aufgeführten Aufgaben auszuführen.

So decodieren Sie eine umhüllte Nachricht

  1. Ruft einen Zeiger auf das codierte BLOB ab.
  2. Rufen Sie CryptMsgOpenToDecode auf, und übergeben Sie die erforderlichen Argumente.
  3. Rufen Sie CryptMsgUpdate einmal auf, und übergeben Sie dabei das in Schritt 2 abgerufene Handle und einen Zeiger auf die Daten, die decodiert werden sollen. Dies bewirkt, dass die entsprechenden Aktionen für die Nachricht ausgeführt werden, je nach Nachrichtentyp.
  4. Rufen Sie CryptMsgGetParam auf, übergeben Sie das in Schritt 2 abgerufene Handle, und CMSG_TYPE_PARAM, um zu überprüfen, ob die Nachricht den Umschlagdatentyp aufweist.
  5. Rufen Sie erneut CryptMsgGetParam auf, und übergeben Sie CMSG_INNER_CONTENT_TYPE_PARAM, um den Datentyp des inneren Inhalts abzurufen.
  6. Wenn der interne Inhaltsdatentyp Daten ist, fahren Sie mit dem Entschlüsseln und Decodieren des Inhalts fort. Führen Sie andernfalls eine Decodierungsprozedur aus, die für den Inhaltsdatentyp geeignet ist.
  7. Wenn der innere Inhaltstyp "data" ist, initialisieren Sie die CMSG_CTRL_DECRYPT_PARA Datenstruktur, und rufen Sie CryptMsgControl auf, und übergeben Sie CMSG_CTRL_DECRYPT und die Adresse der Struktur. Der Inhalt wird entschlüsselt.
  8. Rufen Sie CryptMsgGetParam auf, und übergeben Sie CMSG_CONTENT_PARAM, um einen Zeiger auf das decodierte Inhaltsdatenblob (BYTE-Zeichenfolge ) abzurufen.
  9. Rufen Sie CryptMsgClose auf, um die Nachricht zu schließen.

Das Ergebnis dieses Verfahrens ist, dass die Nachricht decodiert und entschlüsselt wird und ein Zeiger auf das Inhaltsdaten-BLOB abgerufen wird.

Beispiel-C-Programm: Codieren einer umhüllten, signierten Nachricht