Partilhar via


Decodificação de dados enveloped

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

decodificação de dados enveloped

A sequência de eventos para decodificar dados em envelope usando o gerenciamento de chaves de transporte de chaves, conforme descrito na ilustração anterior, é a seguinte:

  • Um ponteiro para a mensagem em envelope digital é recuperado.
  • Um repositório de certificados é aberto.
  • Na mensagem, a ID do destinatário (Minha ID) é recuperada.
  • A ID do destinatário é usada para recuperar o certificado.
  • A chave privada associada a esse certificado é recuperada.
  • A chave privada é usada para descriptografar a chave simétrica (sessão).
  • O algoritmo de criptografia é recuperado da mensagem.
  • Usando a chave privada e o algoritmo de criptografia, os dados são descriptografados.

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

Para decodificar uma mensagem em envelope

  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 decodificados. Isso faz com que as ações apropriadas sejam executadas 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 enveloped.
  5. Chame novamente 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 "data", 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á descriptografado.
  8. Chame CryptMsgGetParam, passando CMSG_CONTENT_PARAM para obter um ponteiro para o BLOB de dados de conteúdo decodificado (cadeia de caracteres BYTE ).
  9. Chame CryptMsgClose para fechar a mensagem.

O resultado desse procedimento é que a mensagem é decodificada e descriptografada e um ponteiro é recuperado para o BLOB de dados de conteúdo.

Exemplo de programa C: codificando uma mensagem envelunciada e assinada