Criptografando dados

O procedimento a seguir descreve as etapas a serem tomadas para criptografar uma mensagem com as funções de criptografia base. Para criptografar mensagens usando padrões PKCS nº 7, consulte Funções de mensagem de baixo nível e Funções de Mensagem Simplificadas.

Para criptografar uma mensagem

  1. Gere uma chave de sessão usando a função CryptGenKey .

    Fazer essa chamada gera uma chave aleatória e retorna um identificador para que a chave possa ser usada para criptografar e descriptografar dados. O algoritmo de criptografia a ser usado também é especificado neste ponto. Como CryptoAPI não permite que aplicativos usem algoritmos de chave pública para criptografar dados em massa, especifique um algoritmo simétrico, como RC2 ou RC4, com a chamada CryptGenKey .

  2. Como alternativa, use a função CryptDeriveKey para transformar uma senha em uma chave adequada para criptografia.

    Se um aplicativo precisar criptografar a mensagem para que qualquer pessoa com uma senha especificada possa descriptografar os dados, use CryptDeriveKey para transformar a senha em uma chave adequada para criptografia.

    Observação

    Nesse caso, essa função é chamada em vez da função CryptGenKey e as chamadas CryptExportKey subsequentes não são necessárias.

     

  3. Se necessário, defina propriedades criptográficas extras da chave usando a função CryptSetKeyParam

    Depois que a chave for gerada, propriedades criptográficas extras da chave poderão ser definidas com a função CryptSetKeyParam. Essa função permite que diferentes seções do arquivo sejam criptografadas com diferentes sais de chave e fornece uma maneira de alterar o modo de criptografia ou o vetor de inicialização da chave. Esses parâmetros podem ser usados para fazer com que a criptografia esteja em conformidade com um padrão de criptografia de dados específico.

  4. Criptografe os dados no arquivo com a função CryptEncrypt .

    A função CryptEncrypt usa a chave de sessão que foi gerada na etapa anterior e criptografa um buffer de dados.

    Observação

    À medida que os dados são criptografados, os dados podem ser ligeiramente expandidos pelo algoritmo de criptografia. O aplicativo é responsável por lembrar o comprimento dos dados criptografados para que o comprimento adequado possa ser especificado posteriormente para a função CryptDecrypt .

     

  5. Opcionalmente, use a função CryptExportKey para permitir que o usuário atual descriptografe os dados no futuro.

    Para permitir que o usuário atual descriptografe os dados no futuro, a função CryptExportKey é usada para salvar a chave de descriptografia em um formulário criptografado (um BLOB de chave) que só pode ser descriptografada com a chave privada do usuário. Essa função requer a chave pública de troca de chaves do usuário para essa finalidade, que pode ser obtida usando a função CryptGetUserKey . A função CryptExportKey retornará um BLOB de chave que deve ser armazenado pelo aplicativo para uso na descriptografia do arquivo

Observação

Se o aplicativo tiver certificados (ou chaves públicas) para outros usuários, ele poderá permitir que outros usuários descriptografem o arquivo executando chamadas CryptExportKey para cada usuário que deve receber acesso. Os BLOBs de chave retornados devem ser armazenados pelo aplicativo, como na etapa 5.

 

Criando uma mensagem criptografada

As funções de mensagem simplificadas facilitam a criptografia e a descriptografia de dados. A ilustração a seguir descreve as tarefas individuais que devem ser realizadas para criptografar uma mensagem. As etapas são descritas na lista a seguir.

criptografando uma mensagem

Para criptografar uma mensagem

  1. Obtenha um ponteiro para a mensagem de texto sem formatação.
  2. Gere uma chave simétrica (sessão).
  3. Usando a chave simétrica e o algoritmo de criptografia especificado, criptografe os dados da mensagem.
  4. Abra um repositório de certificados.
  5. Obtenha o certificado do destinatário.
  6. Obtenha a chave pública do certificado do destinatário.
  7. Usando a chave pública do destinatário, criptografe a chave simétrica.
  8. Obtenha o identificador do destinatário do certificado do destinatário.
  9. Inclua o seguinte na mensagem em envelope digital: o algoritmo de criptografia de dados, os dados criptografados, a chave simétrica criptografada e o identificador do destinatário.