Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I dati con hash sono costituiti da contenuto di qualsiasi tipo e da un hash del contenuto. Può essere usato solo quando è necessario verificare che il contenuto del messaggio non sia stato modificato dopo la creazione dell'hash.
Quando si crea un messaggio con hash, possono essere presenti più algoritmi di hashing e più hash. La figura seguente illustra le attività necessarie per codificare un messaggio con hash. La procedura è descritta nel testo che segue l'illustrazione.
Per creare un messaggio con hash
- Ottieni un puntatore ai dati di cui effettuare l'hashing.
- Selezionare l'algoritmo hash da usare.
- Inserire i dati tramite una funzione hash usando l'algoritmo hash.
- Includere i dati originali da hashing, gli algoritmi di hash 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'hashing e codificare un messaggio usando funzioni di messaggio di basso livello
Creare o recuperare il contenuto di cui eseguire l'hashing.
Ottenere un provider di crittografia.
Inizializzare la struttura CMSG_HASHED_ENCODE_INFO.
Chiamare CryptMsgCalculateEncodedLength per ottenere le dimensioni del BLOB dei messaggi codificati. Allocare memoria per esso.
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, ottieni un handle per il messaggio aperto.
Chiamare CryptMsgUpdate, passando l'handle recuperato nel passaggio 5 e un puntatore ai dati sui quali eseguire l'hashing e la codifica. Questa funzione può essere chiamata il maggior numero di volte necessario per completare il processo di codifica.
Chiamare CryptMsgGetParam, passando l'handle recuperato nel passaggio 5 e i tipi di parametri appropriati per accedere ai dati codificati desiderati. 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 busta, CMSG_BARE_CONTENT_PARAM deve essere passato. Per un esempio che mostra questo, vedere il codice alternativo per codificare un messaggio in busta .
Chiudere il messaggio chiamando CryptMsgClose.
Il risultato di questa procedura è un messaggio codificato che contiene i dati originali, gli algoritmi di hash e l'hash di tali dati. Un puntatore al messaggio codificato BLOB viene ottenuto nel passaggio 7.
Le due procedure seguenti decodificano e quindi verificano i dati con hash.
Per decodificare i dati con hash
- Ottieni un puntatore al BLOB codificato.
- Chiamare CryptMsgOpenToDecode, passando gli argomenti necessari.
- Chiamare CryptMsgUpdate una sola volta, passando l'handle recuperato nel passaggio 2 e un puntatore ai dati da decodificare. In questo modo le azioni appropriate vengono eseguite sul messaggio, a seconda del tipo di messaggio.
- Chiamare CryptMsgGetParam, passando l'handle recuperato nel passaggio 2 e i tipi di parametri appropriati per accedere ai dati decodificati desiderati. Ad esempio, passare CMSG_CONTENT_PARAM per ottenere un puntatore al contenuto decodificato.
Per verificare l'hash
- Chiamare CryptMsgControl, passando CMSG_CTRL_VERIFY_HASH per verificare gli hash.
- Chiamare CryptMsgClose per chiudere il messaggio.
Per un programma di esempio, vedere Programma C di esempio: codifica e decodifica di un messaggio con hash.