Fungsi CryptEncrypt (wincrypt.h)
Perubahan penting untuk mendukung interoperabilitas email Ekstensi Surat Internet Aman/Multiguna (S/MIME) telah dilakukan ke CryptoAPI yang memengaruhi penanganan pesan yang diselimuti. Untuk informasi selengkapnya, lihat bagian Keterangan CryptMsgOpenToEncode.
Sintaksis
BOOL CryptEncrypt(
[in] HCRYPTKEY hKey,
[in] HCRYPTHASH hHash,
[in] BOOL Final,
[in] DWORD dwFlags,
[in, out] BYTE *pbData,
[in, out] DWORD *pdwDataLen,
[in] DWORD dwBufLen
);
Parameter
[in] hKey
Handel ke kunci enkripsi. Aplikasi mendapatkan handel ini dengan menggunakan
Kunci menentukan algoritma enkripsi yang digunakan.
[in] hHash
Handel ke objek hash . Jika data akan di-hash dan dienkripsi secara bersamaan, handel ke objek hash dapat diteruskan dalam parameter
Sebelum memanggil
Jika tidak ada hash yang harus dilakukan, parameter ini harus NULL.
[in] Final
Nilai Boolean yang menentukan apakah ini adalah bagian terakhir dalam seri yang sedang dienkripsi. Final diatur ke TRUE untuk blok terakhir atau satu-satunya dan untuk FALSE jika ada lebih banyak blok yang akan dienkripsi. Untuk informasi selengkapnya, lihat Keterangan.
[in] dwFlags
Nilai
[in, out] pbData
Penunjuk ke buffer yang berisi teks biasa yang akan dienkripsi. Teks biasa dalam buffer ini ditimpa dengan ciphertext
Parameter pdwDataLen
Jika parameter ini berisi NULL, fungsi ini akan menghitung ukuran yang diperlukan untuk ciphertext dan menempatkannya dalam nilai yang ditunjukkan oleh parameter pdwDataLen.
[in, out] pdwDataLen
Penunjuk ke nilai DWORD
Jika buffer yang dialokasikan untuk pbData
Jika
Ketika sandi blok
[in] dwBufLen
Menentukan ukuran total, dalam byte, dari input pbData buffer.
Perhatikan bahwa, tergantung pada algoritma yang digunakan, teks terenkripsi dapat lebih besar dari teks biasa asli. Dalam hal ini, pbData buffer harus cukup besar untuk berisi teks terenkripsi dan padding apa pun.
Sebagai aturan, jika cipher aliran digunakan, ciphertext berukuran sama dengan teks biasa. Jika cipher blok digunakan, ciphertext hingga panjang blok lebih besar dari teks biasa.
Mengembalikan nilai
Jika fungsi berhasil, fungsi mengembalikan nonzero (TRUE).
Jika fungsi gagal, fungsi akan mengembalikan nol (FALSE). Untuk informasi kesalahan yang diperluas, panggil GetLastError.
Kode kesalahan yang diawali oleh NTE dihasilkan oleh CSP tertentu yang digunakan. Beberapa kemungkinan kode kesalahan mengikuti.
Komentar
Jika sejumlah besar data akan dienkripsi, data dapat dilakukan di bagian dengan memanggil CryptEncrypt berulang kali. Parameter Final harus diatur ke TRUE pada panggilan terakhir ke CryptEncrypt, sehingga mesin enkripsi dapat menyelesaikan proses enkripsi dengan benar. Tindakan tambahan berikut dilakukan saat FinalTRUE:
- Jika kunci adalah kunci cipher blok, data diisi ke kelipatan ukuran blok cipher. Jika panjang data sama dengan ukuran blok cipher, satu blok tambahan padding ditambahkan ke data. Untuk menemukan ukuran blok cipher, gunakan CryptGetKeyParam untuk mendapatkan nilai KP_BLOCKLEN kunci.
- Jika sandi beroperasi dalam mode penautan , operasi CryptEncrypt berikutnya mengatur ulang daftar umpan balik sandi ke nilai KP_IV kunci.
- Jika cipher adalahcipher streaming
, CryptEncrypt berikutnya mengatur ulang cipher ke status awal .
Tidak ada cara untuk mengatur daftar umpan balik cipher ke nilai KP_IV kunci tanpa mengatur parameter Akhir
// 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)
// Encrypt the block with the duplicate key.
CryptEncrypt(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)
}
Penyedia Kriptografi yang Ditingkatkan Microsoft
Contoh
Untuk contoh yang menggunakan fungsi ini, lihat Contoh Program C: Mengenkripsi File dan Contoh Program C: Mendekripsi File.
Persyaratan
Syarat | Nilai |
---|---|
klien minimum yang didukung | Windows XP [hanya aplikasi desktop] |
server minimum yang didukung |
Windows Server 2003 [hanya aplikasi desktop] |
Platform Target |
Windows |
Header |
wincrypt.h |
Pustaka |
Advapi32.lib |
DLL |
Advapi32.dll |