Bagikan melalui


Pemrograman CNG umum

CNG API menerapkan model penyedia yang dapat diperluas yang memungkinkan Anda memuat penyedia dengan menentukan algoritma kriptografi yang diperlukan daripada penyedia tertentu. Keuntungannya adalah bahwa penyedia algoritma dapat diganti atau ditingkatkan dan Anda tidak perlu mengubah kode Anda dengan cara apa pun untuk menggunakan penyedia baru. Selain itu, jika beberapa algoritma ditentukan tidak aman di masa depan, versi algoritma tersebut yang lebih aman dapat diinstal tanpa memengaruhi kode Anda. Sebagian besar API CNG memerlukan penyedia atau objek yang dibuat oleh penyedia.

Langkah-langkah umum yang terlibat dalam menggunakan CNG API untuk operasi primitif kriptografi adalah sebagai berikut:

  1. Membuka Penyedia Algoritma
  2. Mendapatkan atau Mengatur Properti Algoritma
  3. Membuat atau Mengimpor Kunci
  4. Melakukan Operasi Kriptografi
  5. Menutup Penyedia Algoritma

Untuk informasi selengkapnya, lihat Contoh Pemrograman.

Membuka Penyedia Algoritma

Fungsi BCryptOpenAlgorithmProvider memberi Anda handel penyedia algoritma yang digunakan dalam API CNG berikutnya, seperti BCryptCreateHash atau BCryptGenerateKeyPair.

Mendapatkan atau Mengatur Properti Algoritma

Anda dapat menggunakan handel penyedia algoritma untuk mendapatkan detail implementasi untuk algoritma, seperti ukuran kunci atau mode operasi saat ini. Anda menggunakan fungsi BCryptGetProperty untuk mendapatkan properti tertentu.

Anda juga dapat mengubah properti algoritma. Misalnya, Jika Anda ingin menggunakan rantai cipher blok ECB dengan AES, Anda mengatur properti BCRYPT_CHAINING_MODE algoritma AES ke BCRYPT_CHAIN_MODE_ECB; properti ditetapkan ke semua kunci AES yang dibuat menggunakan handel algoritma ini, tanpa perlu mengonfigurasi setiap kunci AES. Anda menggunakan fungsi BCryptSetProperty untuk memodifikasi properti ini.

Membuat atau Mengimpor Kunci

Bergantung pada jenis algoritma yang Anda gunakan, Anda mungkin perlu membuat atau memuat kunci. Misalnya, fungsi BCryptEncrypt mengambil handel kunci untuk parameter pertama. Jika Anda ingin fungsi tersebut mengenkripsi data dengan algoritma enkripsi simetris seperti AES, Anda harus terlebih dahulu mendapatkan kunci. Cara Anda mendapatkan kunci tergantung pada jenis algoritma yang digunakan dan sumber kunci.

Anda dapat membuat kunci sementara dengan fungsi BCryptGenerateSymmetricKey dan BCryptGenerateKeyPair . Anda juga dapat mengimpor kunci sementara dari BLOB memori dengan fungsi BCryptImportKey dan BCryptImportKeyPair .

Untuk kunci yang bertahan, Anda menggunakan fungsi penyimpanan utama untuk memuat penyedia penyimpanan utama, lalu membuat atau memuat kunci. Anda juga dapat menggunakan fungsi-fungsi ini untuk membuat atau memuat kunci sementara dengan meneruskan NULL untuk nama kontainer apa pun. Untuk informasi selengkapnya tentang fungsi penyimpanan utama, lihat Fungsi Penyimpanan Kunci CNG.

Melakukan Operasi Kriptografi

Anda sekarang siap untuk melakukan operasi kriptografi, seperti mengenkripsi atau mendekripsi data dengan menggunakan fungsi BCryptEncrypt atau BCryptDecrypt .

Menutup Penyedia Algoritma

Ketika penyedia tidak lagi diperlukan, Anda harus meneruskan handel ke fungsi BCryptCloseAlgorithmProvider untuk menutup penyedia. Hal ini menyebabkan penyedia merilis sumber daya apa pun yang telah dialokasikan untuk instans penyedia algoritma tersebut. Setelah handel penyedia ditutup, handel tidak dapat digunakan kembali.

Memuat penyedia dapat menjadi proses yang relatif intensif waktu. Oleh karena itu, Anda harus menyimpan cache penyedia apa pun yang akan Anda referensikan beberapa kali selama masa pakai aplikasi Anda.

Contoh Pemrograman

Contoh berikut menjelaskan cara melakukan operasi kriptografi tertentu menggunakan CNG.