Decodifica dei dati in busta

Le attività generali necessarie per decodificare un messaggio busto vengono illustrate nella figura seguente e descritte nell'elenco che segue.

decodifica dei dati in busta

La sequenza di eventi per la decodifica dei dati in busta tramite la gestione delle chiavi di trasporto chiave, come illustrato nella figura precedente, è la seguente:

  • Viene recuperato un puntatore al messaggio in busto digitale .
  • Viene aperto un archivio certificati .
  • Dal messaggio viene recuperato l'ID destinatario (ID personale).
  • L'ID destinatario viene usato per recuperare il certificato.
  • La chiave privata associata a tale certificato viene recuperata.
  • La chiave privata viene usata per decrittografare la chiave simmetrica (sessione).
  • L'algoritmo di crittografia viene recuperato dal messaggio.
  • Usando la chiave privata e l'algoritmo di crittografia, i dati vengono decrittografati.

La procedura seguente usa funzioni di messaggio di basso livello per eseguire le attività appena elencate.

Per decodificare un messaggio busto

  1. Ottenere un puntatore al BLOB codificato.
  2. Chiamare CryptMsgOpenToDecode, passando gli argomenti necessari.
  3. Chiamare CryptMsgUpdate una volta, passando l'handle recuperato nel passaggio 2 e un puntatore ai dati da decodificare. In questo modo, le azioni appropriate devono essere eseguite sul messaggio, a seconda del tipo di messaggio.
  4. Chiamare CryptMsgGetParam, passando l'handle recuperato nel passaggio 2 e CMSG_TYPE_PARAM per verificare che il messaggio sia del tipo di dati busto.
  5. Chiamare di nuovo CryptMsgGetParam, passando CMSG_INNER_CONTENT_TYPE_PARAM per ottenere il tipo di dati del contenuto interno.
  6. Se il tipo di dati del contenuto interno è dati, procedere alla decrittografia e decodificare il contenuto. In caso contrario, eseguire una procedura di decodifica appropriata per il tipo di dati del contenuto.
  7. Supponendo che il tipo di contenuto interno sia "dati", inizializzare la struttura dei dati CMSG_CTRL_DECRYPT_PARA e chiamare CryptMsgControl, passando CMSG_CTRL_DECRYPT e l'indirizzo della struttura. Il contenuto verrà decrittografato.
  8. Chiamare CryptMsgGetParam, passando CMSG_CONTENT_PARAM per ottenere un puntatore al BLOB dei dati del contenuto decodificato (stringa BYTE ).
  9. Chiamare CryptMsgClose per chiudere il messaggio.

Il risultato di questa procedura è che il messaggio viene decodificato e decrittografato e un puntatore viene recuperato nel BLOB dei dati del contenuto.

Programma C di esempio: codifica di un messaggio busto, firmato