Condividi tramite


Codifica e decodifica di un messaggio hash

I dati hash sono costituiti da contenuto di qualsiasi tipo e un hash del contenuto. Può essere usato quando è necessario solo verificare che il contenuto del messaggio non sia stato modificato dopo la creazione dell'hash.

Quando si crea un messaggio hash, è possibile che siano presenti più algoritmi hash e più hash. La figura seguente illustra le attività necessarie per codificare un messaggio hash. La procedura è descritta nel testo che segue l'illustrazione.

creazione di un messaggio hash

Per creare un messaggio hash

  1. Ottenere un puntatore ai dati da hashare.
  2. Selezionare l'algoritmo hash da usare.
  3. Inserire i dati tramite una funzione hash usando l'algoritmo hash.
  4. Includere i dati originali da hash, gli algoritmi di hashing e gli hash nel messaggio codificato.

Per usare funzioni di messaggio di basso livello per eseguire le attività appena descritte, usare la procedura seguente.

Per eseguire l'hash e codificare un messaggio usando funzioni di messaggio di basso livello

  1. Creare o recuperare il contenuto da hashare.

  2. Ottenere un provider di crittografia.

  3. Inizializzare la struttura CMSG_HASHED_ENCODE_INFO .

  4. Chiamare CryptMsgCalculateEncodedLength per ottenere le dimensioni del BLOB dei messaggi codificati. Allocare memoria per essa.

  5. Chiamare CryptMsgOpenToEncode, passando CMSG_HASHED per il parametro dwMsgType e un puntatore a CMSG_HASHED_ENCODE_INFO per il parametro pvMsgEncodeInfo . A seguito di questa chiamata, si ottiene un handle per il messaggio aperto.

  6. Chiamare CryptMsgUpdate, passando l'handle recuperato nel passaggio 5 e un puntatore ai dati che devono essere hash e codificati. Questa funzione può essere chiamata quante volte necessario per completare il processo di codifica.

  7. Chiamare CryptMsgGetParam, passando l'handle recuperato nel passaggio 5 e i tipi di parametri appropriati per accedere ai dati desiderati e codificati. Ad esempio, passare CMSG_CONTENT_PARAM per ottenere un puntatore all'intero messaggio PKCS #7 .

    Se il risultato di questa codifica deve essere usato come dati interni per un altro messaggio codificato, ad esempio un messaggio in busto, CMSG_BARE_CONTENT_PARAM deve essere passato. Per un esempio che mostra questo, vedere Codice alternativo per la codifica di un messaggio in busto.

  8. Chiudere il messaggio chiamando CryptMsgClose.

Il risultato di questa procedura è un messaggio codificato che contiene i dati originali, gli algoritmi di hashing e l'hash di tali dati. Un puntatore al BLOB dei messaggi codificati viene ottenuto nel passaggio 7.

Le due procedure seguenti decodificano e quindi verificano i dati hash.

Per decodificare i dati hash

  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 i tipi di parametri appropriati per accedere ai dati desiderati e decodificati. Ad esempio, passare CMSG_CONTENT_PARAM per ottenere un puntatore al contenuto decodificato.

Per verificare l'hash

  1. Chiamare CryptMsgControl, passando CMSG_CTRL_VERIFY_HASH per verificare gli hash.
  2. Chiamare CryptMsgClose per chiudere il messaggio.

Per un programma di esempio, vedere Esempio di programma C: codifica e decodifica di un messaggio hash.