Condividi tramite


Funzione CryptDecryptMessage (wincrypt.h)

La funzione CryptDecryptMessagedecodifica e decrittografa un messaggio.

Sintassi

BOOL CryptDecryptMessage(
  [in]                PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
  [in]                const BYTE                  *pbEncryptedBlob,
  [in]                DWORD                       cbEncryptedBlob,
  [out, optional]     BYTE                        *pbDecrypted,
  [in, out, optional] DWORD                       *pcbDecrypted,
  [out, optional]     PCCERT_CONTEXT              *ppXchgCert
);

Parametri

[in] pDecryptPara

Puntatore a una struttura CRYPT_DECRYPT_MESSAGE_PARA che contiene parametri di decrittografia.

[in] pbEncryptedBlob

Puntatore a un buffer che contiene il messaggio codificato e crittografato da decrittografare.

[in] cbEncryptedBlob

Dimensioni, in byte, del messaggio codificato e crittografato.

[out, optional] pbDecrypted

Puntatore a un buffer che riceve il messaggio decrittografato.

Per impostare le dimensioni di queste informazioni per scopi di allocazione della memoria, questo parametro può essere NULL. Un messaggio decrittografato non verrà restituito se questo parametro è NULL. Per altre informazioni, vedere Recupero dei dati di lunghezza sconosciuta.

[in, out, optional] pcbDecrypted

Puntatore a un DWORD che specifica le dimensioni, in byte, del buffer a cui punta il parametro pbDecrypted . Quando la funzione restituisce, questa variabile contiene le dimensioni, in byte, del messaggio decrittografato copiato in pbDecrypted.

Nota Quando si elaborano i dati restituiti nel buffer pbDecrypted , le applicazioni devono usare le dimensioni effettive dei dati restituiti. Le dimensioni effettive possono essere leggermente inferiori rispetto alle dimensioni del buffer specificato in pcbDecrypted in input. In input, le dimensioni del buffer vengono in genere specificate abbastanza grandi per garantire che i dati di output più grandi possibili si adattano al buffer. In output, la DWORD viene aggiornata alle dimensioni effettive dei dati copiati nel buffer.
 

[out, optional] ppXchgCert

Puntatore a una struttura CERT_CONTEXT di un certificato che corrisponde alla chiave di scambio privata necessaria per decrittografare il messaggio. Per indicare che la funzione non deve restituire il contesto del certificato usato per decrittografare, impostare questo parametro su NULL.

Valore restituito

Se la funzione ha esito positivo, la funzione restituisce non zero (TRUE).

Se la funzione ha esito negativo, restituisce zero (FALSE). Per informazioni sull'errore estese, chiamare GetLastError.

Nota Gli errori delle chiamate a CryptImportKey e CryptDecrypt potrebbero essere propagati a questa funzione.
 
La funzione GetLastError restituisce più spesso i codici di errore seguenti.
Codice restituito Descrizione
ERROR_MORE_DATA
Se il buffer specificato dal parametro pbDecrypted non è sufficiente per contenere i dati restituiti, la funzione imposta il codice ERROR_MORE_DATA e archivia le dimensioni del buffer necessarie, in byte, nella variabile puntata da pcbDecrypted.
E_INVALIDARG
Tipi di codifica del messaggio e del certificato non validi. Attualmente sono supportati solo PKCS_7_ASN_ENCODING e X509_ASN_ENCODING_TYPE. CbSize non valido in *pDecryptPara.
CRYPT_E_UNEXPECTED_MSG_TYPE
Non un messaggio crittografico in busto .
NTE_BAD_ALGID
Il messaggio è stato crittografato usando un algoritmo sconosciuto o non supportato.
CRYPT_E_NO_DECRYPT_CERT
Non è stato trovato alcun certificato con una proprietà di chiave privata da usare per decrittografare.
 

Se la funzione ha esito negativo, GetLastError potrebbe restituire un errore di codifica astratta Notation One (ASN.1). Per informazioni su questi errori, vedere Codifica ASN.1/Decodifica dei valori restituiti.

Commenti

Quando NULL viene passato per pbDecrypted e pcbDecrypted non è NULL, NULL viene restituito per l'indirizzo passato in ppXchgCert; in caso contrario, viene restituito un puntatore a un CERT_CONTEXT. Per un messaggio decrittografato correttamente, questo puntatore a un CERT_CONTEXT punta al contesto del certificato usato per decrittografare il messaggio. Deve essere liberato chiamando CertFreeCertificateContext. Se la funzione ha esito negativo, il valore in ppXchgCert è impostato su NULL.

Esempio

Per un esempio che usa questa funzione, vedere Esempio di programma C: Uso di CryptEncryptMessage e CryptDecryptMessage.

Requisiti

   
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione wincrypt.h
Libreria Crypt32.lib
DLL Crypt32.dll

Vedi anche

CryptDecryptAndVerifyMessageSignature

Funzioni di messaggio semplificate