Funzioni di crittografia e decrittografia dei dati MSDN
Scegli quale algoritmo usare.
Devi usare CryptAcquireContext
ottenere un handle per il fornitore di servizi Crypto. Quindi chiama CryptGenKey
per generare una crittografia oggetto chiave. Questa funzione è dove si definisce l'algoritmo che si desidera utilizzare. Devi anche chiamare CryptCreateHash
a crea un handle per un oggetto hash. Quindi chiami CryptEncrypt
con l'oggetto chiave e l'oggetto hash appena generato.
BOOL WINAPI CryptGenKey(
_In_ HCRYPTPROV hProv,
_In_ ALG_ID Algid,
_In_ DWORD dwFlags,
_Out_ HCRYPTKEY *phKey
);
possibili ALG_ID
La maggior parte delle implementazioni di crittografia richiede di chiamare una funzione finale per completare la crittografia. Questo prenderà in considerazione qualsiasi padding che deve essere aggiunto, e probabilmente qualche altra pulizia algoritmica. Generalmente ciò significa che l'ultimo blocco di dati crittografati non viene emesso nel buffer finché non viene chiamata la funzione finale . Ad esempio, in OpenSSL (quando si utilizzano le funzioni EVP) si ha EVP_EncryptInit
, EVP_EncryptUpdate
e EVP_EncryptFinal
.
Implementazione di Microsoft di CryptEncrypt
fornisce un argomento boolean final
. Quando stai crittografando la tua ultima sezione di dati, devi impostare questo valore su TRUE
. Se stai crittografando solo una dimensione a blocco singolo (o inferiore) di dati, devi impostare questo valore su TRUE
. La sezione delle osservazioni di CryptEncrypt
spiega che cosa eseguono quando è impostata su true.
- If the key is a block cipher key, the data is padded to a multiple of the block size of the cipher. If the data length equals the block
size of the cipher, one additional block of padding is appended to the
data. To find the block size of a cipher, use CryptGetKeyParam to get
the KP_BLOCKLEN value of the key.
- If the cipher is operating in a chaining mode, the next CryptEncrypt operation resets the cipher's feedback register to the
KP_IV value of the key.
- If the cipher is a stream cipher, the next CryptEncrypt resets the cipher to its initial state.
CryptDecrypt
fornisce lo stesso boolean final
variabile e la stessa operazione deve essere eseguita durante la decrittografia dei dati.