Função CryptDecrypt (wincrypt.h)
Alterações importantes para dar suporte a interoperabilidade de email do de Email seguro/multiuso (S/MIME) foram feitas no CryptoAPI que afetam o tratamento de mensagens envolvidas. Para obter mais informações, consulte a seção Comentários de CryptMsgOpenToEncode.
Sintaxe
BOOL CryptDecrypt(
[in] HCRYPTKEY hKey,
[in] HCRYPTHASH hHash,
[in] BOOL Final,
[in] DWORD dwFlags,
[in, out] BYTE *pbData,
[in, out] DWORD *pdwDataLen
);
Parâmetros
[in] hKey
Um identificador para a chave a ser usada para a descriptografia. Um aplicativo obtém esse identificador usando a função
Essa chave especifica o algoritmo de descriptografia a ser usado.
[in] hHash
Um identificador para um objeto de hash . Se os dados forem descriptografados e hash simultaneamente, um identificador para um objeto hash será passado nesse parâmetro. O valor de hash é atualizado com ode texto sem formatação
Antes de chamar CryptDecrypt, o aplicativo deve obter um identificador para o objeto hash chamando a função CryptCreateHash. Depois que a descriptografia for concluída, o valor de hash poderá ser obtido usando a função CryptGetHashParam, ele também pode ser assinado usando a função CryptSignHash ou pode ser usado para verificar uma assinatura digital usando a função CryptVerifySignature.
Se nenhum hash for feito, esse parâmetro deverá ser zero.
[in] Final
Um valor booliano que especifica se esta é a última seção de uma série que está sendo descriptografada. Esse valor será VERDADEIRO se esse for o último ou único bloco. Se este não for o último bloco, esse valor será false. Para obter mais informações, consulte Comentários.
[in] dwFlags
Os valores de sinalizador a seguir são definidos.
[in, out] pbData
Um ponteiro para um buffer que contém os dados a serem descriptografados. Depois que a descriptografia for executada, o texto sem formatação será colocado novamente nesse mesmo buffer.
O número de bytes criptografados nesse buffer é especificado por pdwDataLen.
[in, out] pdwDataLen
Um ponteiro para um valor DWORD
Quando um de criptografia de bloco é usado, esse comprimento de dados deve ser um múltiplo do tamanho do bloco, a menos que esta seja a seção final dos dados a ser descriptografada e o parâmetro Final é VERDADEIRO.
Valor de retorno
Se a função for bem-sucedida, a função retornará diferente de zero (TRUE).
Se a função falhar, ela retornará zero (false). Para obter informações de erro estendidas, chame GetLastError.
Os códigos de erro precedidos pelo NTE são gerados pelo CSP específico que está sendo usado. Alguns códigos de erro possíveis seguem.
Observações
Se uma grande quantidade de dados deve ser descriptografada, ela pode ser feita em seções chamando CryptDecrypt repetidamente. O parâmetro Final deve ser definido como VERDADEIRO somente na última chamada para CryptDecrypt, de modo que o mecanismo de descriptografia possa concluir corretamente o processo de descriptografia. As seguintes ações extras são executadas quando Final é verdadeiro:
- Se a chave for uma chave de criptografia de bloco, os dados serão adicionados a um múltiplo do tamanho do bloco da criptografia. Para localizar o tamanho do bloco de uma criptografia, use CryptGetKeyParam para obter o valor KP_BLOCKLEN da chave.
- Se a criptografia estiver operando em um modo de encadeamento , a próxima operação CryptDecrypt redefinirá o registro de comentários da criptografia para o valor KP_IV da chave.
- Se a codificação for umade criptografia de fluxo
, a próxima chamada CryptDecrypt redefinirá a criptografia para seu estado deinicial .
Não há como definir o registro de comentários da criptografia para o valor KP_IV da chave sem definir o parâmetro Final
// Set the IV for the original key. Do not use the original key for
// encryption or decryption after doing this because the key's
// feedback register will get modified and you cannot change it.
CryptSetKeyParam(hOriginalKey, KP_IV, newIV)
while(block = NextBlock())
{
// Create a duplicate of the original key. This causes the
// original key's IV to be copied into the duplicate key's
// feedback register.
hDuplicateKey = CryptDuplicateKey(hOriginalKey)
// Decrypt the block with the duplicate key.
CryptDecrypt(hDuplicateKey, block)
// Destroy the duplicate key. Its feedback register has been
// modified by the CryptEncrypt function, so it cannot be used
// again. It will be re-duplicated in the next iteration of the
// loop.
CryptDestroyKey(hDuplicateKey)
}
O provedor de criptografia Microsoft Enhanced Cryptographic dá suporte à criptografia direta com RSA de chaves públicas e descriptografia com chaves privadas RSA. A criptografia usa pkcs nº 1 de preenchimento. Na descriptografia, esse preenchimento é verificado. O comprimento de dados a serem descriptografados deve ter o mesmo comprimento que o módulo da chave RSA usada para descriptografar os dados. Se o texto criptografado tiver zeros nos bytes mais significativos, esses bytes deverão ser incluídos no buffer de dados de entrada e no comprimento do buffer de entrada. O texto criptografado deve estar em formato de little-endian.
Exemplos
Para obter um exemplo que usa essa função, consulte Exemplo de Programa C: Descriptografando um arquivo.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows XP [somente aplicativos da área de trabalho] |
servidor com suporte mínimo | Windows Server 2003 [somente aplicativos da área de trabalho] |
da Plataforma de Destino |
Windows |
cabeçalho | wincrypt.h |
biblioteca | Advapi32.lib |
de DLL |
Advapi32.dll |
Consulte também
CryptGetKeyParam