Fungsi CryptImportKey (wincrypt.h)
Sintaksis
BOOL CryptImportKey(
[in] HCRYPTPROV hProv,
[in] const BYTE *pbData,
[in] DWORD dwDataLen,
[in] HCRYPTKEY hPubKey,
[in] DWORD dwFlags,
[out] HCRYPTKEY *phKey
);
Parameter
[in] hProv
Handel CSP yang diperoleh dengan fungsi
[in] pbData
Array BYTE
[in] dwDataLen
Berisi panjang, dalam byte, dari BLOB kunci.
[in] hPubKey
Handel ke kunci kriptografi yang mendekripsi kunci yang disimpan di pbData. Kunci ini harus berasal dari CSP yang sama yang hProv. Arti parameter ini berbeda tergantung pada jenis CSP dan jenis BLOB kunci yang diimpor:
- Jika BLOB kunci dienkripsi dengan kunci pasangan kunci pertukaran, misalnya, SIMPLEBLOB, parameter ini dapat menjadi handel ke kunci pertukaran kunci.
- Jika BLOB kunci dienkripsi dengan kunci sesi, misalnya, PRIVATEKEYBLOBterenkripsi , parameter ini berisi handel kunci sesi ini.
- Jika BLOB kunci tidak dienkripsi, misalnya, PUBLICKEYBLOB, parameter ini tidak digunakan dan harus nol.
- Jika BLOB kunci dienkripsi dengan kunci sesi dalam Schannel CSP, misalnya, terenkripsi OPAQUEKEYBLOB atau khusus vendor lainnyaOPAQUEKEYBLOB , parameter ini tidak digunakan dan harus diatur ke nol.
[in] dwFlags
Saat ini hanya digunakan ketika pasangan kunci publik/privat
Parameter ini bisa menjadi salah satu nilai berikut.
Nilai | Arti |
---|---|
|
Kunci yang diimpor pada akhirnya akan diekspor ulang. Jika bendera ini tidak digunakan, maka panggilan ke CryptExportKey dengan handel kunci gagal. |
|
Bendera ini menyebabkan pemformatan PKCS #1 versi 2 diperiksa dengan enkripsi dan dekripsi RSA saat mengimpor SIMPLEBLOBs. |
|
Nilai tanpa garam dialokasikan untuk kunci konten 40-bit. Untuk informasi selengkapnya, lihat Fungsionalitas Nilai Garam . |
|
Jika bendera ini diatur, CSP memberi tahu pengguna melalui kotak dialog atau beberapa metode lain ketika tindakan tertentu dicoba menggunakan kunci ini. Perilaku yang tepat ditentukan oleh CSP atau jenis CSP yang digunakan. Jika konteks penyedia diperoleh dengan set CRYPT_SILENT, menggunakan bendera ini menyebabkan kegagalan dan kesalahan terakhir diatur ke NTE_SILENT_CONTEXT. |
|
Memungkinkan impor kunci RC2 yang lebih besar dari 16 byte. Jika bendera ini tidak diatur, panggilan ke fungsi |
[out] phKey
Pointer ke nilai HCRYPTKEY
Mengembalikan nilai
Jika fungsi berhasil, fungsi mengembalikan nonzero.
Jika fungsi gagal, fungsi akan mengembalikan nol. Untuk informasi kesalahan yang diperluas, panggil GetLastError.
Kode kesalahan yang diawali oleh "NTE" dihasilkan oleh CSP tertentu yang digunakan. Beberapa kemungkinan kode kesalahan mengikuti.
Mengembalikan kode | Deskripsi |
---|---|
|
Beberapa CSP mengatur kesalahan ini jika kunci privat diimpor ke dalam kontainer sementara utas lain atau proses menggunakan kunci ini. |
|
Salah satu parameter menentukan handel yang tidak valid. |
|
Salah satu parameter berisi nilai yang tidak valid. Ini paling sering merupakan pointer yang tidak valid. |
|
BLOB kunci sederhana yang akan diimpor tidak dienkripsi dengan algoritma pertukaran kunci yang diharapkan. |
|
Algoritma yang berfungsi dengan kunci publik yang akan diimpor tidak didukung oleh CSP ini, atau upaya dilakukan untuk mengimpor kunci sesi yang dienkripsi dengan sesuatu selain salah satu kunci publik Anda. |
|
Parameter |
|
Jenis BLOB kunci tidak didukung oleh CSP ini dan mungkin tidak valid. |
|
Parameter hProv |
|
Nomor versi blob kunci tidak cocok dengan versi CSP. Ini biasanya menunjukkan bahwa CSP perlu ditingkatkan. |
Komentar
Saat mengimpor kunci Kode Autentikasi Pesan (HMAC)
Fungsi
Anda dapat menggunakan jenis PLAINTEXTKEYBLOB
Untuk contoh mengimpor kunci teks biasa, lihat Contoh Program C: Mengimpor Kunci Teks Biasa.
Contoh berikut menunjukkan bagaimana Anda bisa mengatur bidang header.
keyBlob.header.bType = PLAINTEXTKEYBLOB;
keyBlob.header.bVersion = CUR_BLOB_VERSION;
keyBlob.header.reserved = 0;
// CALG_AES_128 is used as an example. You would set this to the
// algorithm id that corresponds to the one used by the key.
keyBlob.header.aiKeyAlg = CALG_AES_128;
Panjang kunci ditentukan dalam keyBlob.keyLength, yang diikuti oleh data kunci aktual.
Ukuran kunci berikut didukung.
Algoritma | Ukuran kunci yang didukung |
---|---|
CALG_DES | 64 bit |
CALG_3DES_112 | 128 bit |
CALG_3DES | 192 bit |
Contoh
Contoh berikut menunjukkan cara mengimpor kunci dari BLOB kunci. Untuk contoh lengkap untuk fungsi ini, lihat Contoh Program C: Menandatangani Hash dan Memverifikasi Tanda Tangan Hash. Untuk kode tambahan yang menggunakan fungsi ini, lihat Contoh Program C: Mendekripsi File.
#include <windows.h>
#include <stdio.h>
#include <Wincrypt.h>
BOOL ImportKey(HCRYPTPROV hProv, LPBYTE pbKeyBlob, DWORD dwBlobLen)
{
HCRYPTKEY hPubKey;
//---------------------------------------------------------------
// This code assumes that a cryptographic provider (hProv)
// has been acquired and that a key BLOB (pbKeyBlob) that is
// dwBlobLen bytes long has been acquired.
//---------------------------------------------------------------
// Get the public key of the user who created the digital
// signature and import it into the CSP by using CryptImportKey.
// The key to be imported is in the buffer pbKeyBlob that is
// dwBlobLen bytes long. This function returns a handle to the
// public key in hPubKey.
if(CryptImportKey(
hProv,
pbKeyBlob,
dwBlobLen,
0,
0,
&hPubKey))
{
printf("The key has been imported.\n");
}
else
{
printf("Public key import failed.\n");
return FALSE;
}
//---------------------------------------------------------------
// Insert code that uses the imported public key here.
//---------------------------------------------------------------
//---------------------------------------------------------------
// When you have finished using the key, you must release it.
if(CryptDestroyKey(hPubKey))
{
printf("The public key has been released.");
}
else
{
printf("The public key has not been released.");
return FALSE;
}
return TRUE;
}
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 |
Lihat juga