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.
As tarefas gerais necessárias para decodificar uma mensagem envelopada são descritas na ilustração a seguir e descritas na lista a seguir.
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
- 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 decifrados. 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 CMSG_TYPE_PARAM para verificar se a mensagem é do tipo de dados envelopados.
- Novamente chame CryptMsgGetParam, passando CMSG_INNER_CONTENT_TYPE_PARAM para obter o tipo de dados do conteúdo interno .
- 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.
- 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.
- Chame CryptMsgGetParam, passando CMSG_CONTENT_PARAM para obter um ponteiro para os dados de conteúdo decodificados BLOB (BYTE string).
- 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.
Tópicos relacionados