Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Dados hash consistem de conteúdo de qualquer tipo e de um hash do conteúdo. Ele pode ser usado quando é necessário apenas confirmar que o conteúdo da mensagem não foi modificado desde que o hash foi criado.
Ao criar uma mensagem com hash, pode haver vários algoritmos de hash e vários hashes. A ilustração a seguir mostra as tarefas necessárias para codificar uma mensagem com hash. O procedimento é descrito no texto que se segue à ilustração.
Para criar uma mensagem com hash
- Obtenha um ponteiro para os dados a serem hashados.
- Selecione o algoritmo de hash a ser usado.
- Passe os dados por uma função de hash usando o algoritmo de hash.
- Inclua os dados originais a serem hashados, os algoritmos de hashing e os hashes na mensagem codificada.
Para usar funções de mensagem de baixo nível para realizar as tarefas que acabamos de descrever, use o procedimento a seguir.
Para hash e codificar uma mensagem usando funções de mensagem de baixo nível
Crie ou recupere o conteúdo a ser colocado em hash.
Obtenha um provedor de criptografia.
Inicialize a estrutura CMSG_HASHED_ENCODE_INFO.
Chame CryptMsgCalculateEncodedLength para obter o tamanho da mensagem codificada BLOB. Aloque memória para ele.
Chame CryptMsgOpenToEncode, passando CMSG_HASHED para o parâmetro dwMsgType e um ponteiro para CMSG_HASHED_ENCODE_INFO para o parâmetro pvMsgEncodeInfo. Como resultado dessa chamada, você recebe um identificador para a mensagem aberta.
Chame CryptMsgUpdate, passando o identificador recuperado na etapa 5 e um ponteiro para os dados que devem ser colocados em hash e codificados. Esta função pode ser chamada quantas vezes forem necessárias para concluir o processo de codificação.
Chame CryptMsgGetParam, passando o identificador recuperado na etapa 5 e os tipos de parâmetros apropriados para acessar os dados codificados desejados. Por exemplo, passe em CMSG_CONTENT_PARAM para obter um ponteiro para a mensagem completa PKCS #7.
Se o resultado dessa codificação for usado como o de dados internos para outra mensagem codificada, como uma mensagem envelopada, CMSG_BARE_CONTENT_PARAM deverá ser passado. Para obter um exemplo mostrando isso, consulte Código alternativo para codificar uma mensagem envelopada.
Feche a mensagem chamando CryptMsgClose.
O resultado deste procedimento é uma mensagem codificada que contém os dados originais, os algoritmos de hash e o hash desses dados. Um ponteiro para a mensagem codificada BLOB é obtido na etapa 7.
Os dois procedimentos a seguir decodificam e verificam os dados em hash.
Para decodificar dados em hash
- Obtenha um ponteiro para o BLOB codificado.
- Chame CryptMsgOpenToDecode, passando os argumentos necessários.
- Chame CryptMsgUpdate uma vez, passando o identificador recuperado na etapa 2 e um ponteiro para os dados que devem ser decodificados. Isso faz com que as ações apropriadas sejam tomadas na mensagem, dependendo do tipo de mensagem.
- Chame CryptMsgGetParam, passando o identificador recuperado na etapa 2 e os tipos de parâmetros apropriados para acessar os dados desejados e decodificados. Por exemplo, passe CMSG_CONTENT_PARAM para obter um ponteiro para o conteúdo decodificado.
Para verificar o hash
- Chame CryptMsgControl, passando CMSG_CTRL_VERIFY_HASH para verificar os hashes.
- Chame CryptMsgClose para fechar a mensagem.
Para obter um programa de exemplo, consulte Exemplo de Programa C: Codificando e Decodificando uma Mensagem Criptografada.