Partilhar via


Decodificando dados envelopados

As tarefas gerais necessárias para decodificar uma mensagem envelopada são descritas na ilustração a seguir e descritas na lista a seguir.

descodificação de dados envelopados

A sequência de eventos para a decodificação de dados encapsulados usando a gestão de transporte de chaves, conforme descrito na ilustração anterior, é a seguinte:

  • Um ponteiro para a mensagem encapsulada digitalmente é recuperado.
  • Um armazenamento de certificados é aberto.
  • Da mensagem, obtém-se o ID do destinatário (Meu ID).
  • O ID do destinatário é usado para recuperar o certificado.
  • A chave privada associada a esse certificado é recuperada.
  • A chave privada é usada para desencriptar a chave simétrica (sessão).
  • O algoritmo de encriptação é recuperado da mensagem.
  • Usando a chave privada e o algoritmo de encriptação, os dados são desencriptados.

O procedimento a seguir usa funções de mensagem de baixo nível para realizar as tarefas listadas.

Para decodificar uma mensagem envelopada

  1. Obtenha um ponteiro para o BLOB codificado.
  2. Chame CryptMsgOpenToDecode, passando os argumentos necessários.
  3. Chame CryptMsgUpdate uma vez, passando o identificador recuperado na etapa 2 e um ponteiro para os dados que devem ser decifrados. Isso faz com que as ações apropriadas sejam tomadas na mensagem, dependendo do tipo de mensagem.
  4. Chame CryptMsgGetParam, passando o identificador recuperado na etapa 2 e CMSG_TYPE_PARAM para verificar se a mensagem é do tipo de dados envelopados.
  5. Novamente chame CryptMsgGetParam, passando CMSG_INNER_CONTENT_TYPE_PARAM para obter o tipo de dados do conteúdo interno .
  6. Se o tipo de dados de conteúdo interno for dados, prossiga para descriptografar e decodificar o conteúdo. Caso contrário, execute um procedimento de decodificação apropriado para o tipo de dados de conteúdo.
  7. Supondo que o tipo de conteúdo interno seja "dados", inicialize a estrutura de dados CMSG_CTRL_DECRYPT_PARA e chame CryptMsgControl, passando CMSG_CTRL_DECRYPT e o endereço da estrutura. O conteúdo será desencriptado.
  8. Chame CryptMsgGetParam, passando CMSG_CONTENT_PARAM para obter um ponteiro para os dados de conteúdo decodificados BLOB (BYTE string).
  9. Chame CryptMsgClose para fechar a mensagem.

O resultado deste procedimento é que a mensagem é descodificada e desencriptada e é recuperado um ponteiro para o BLOB de dados de conteúdo.

Exemplo de programa C: Codificando uma mensagem envelopada e assinada