Bagikan melalui


Fungsi CryptDuplicateKey (wincrypt.h)

Penting API ini tidak digunakan lagi. Perangkat lunak baru dan yang sudah ada harus mulai menggunakan Cryptography Next Generation API. Microsoft dapat menghapus API ini dalam rilis mendatang.
 
Fungsi CryptDuplicateKey membuat salinan kunci dan status kunci yang tepat.

Sintaks

BOOL CryptDuplicateKey(
  [in]  HCRYPTKEY hKey,
  [in]  DWORD     *pdwReserved,
  [in]  DWORD     dwFlags,
  [out] HCRYPTKEY *phKey
);

Parameter

[in] hKey

Handel ke kunci yang akan diduplikasi.

[in] pdwReserved

Dicadangkan untuk penggunaan di masa mendatang dan harus NULL.

[in] dwFlags

Dicadangkan untuk penggunaan di masa mendatang dan harus nol.

[out] phKey

Alamat handel ke kunci duplikat. Setelah Anda selesai menggunakan kunci, lepaskan handel dengan memanggil fungsi CryptDestroyKey .

Mengembalikan nilai

Jika fungsi berhasil, nilai yang dikembalikan bukan nol (TRUE).

Jika fungsi gagal, nilai yang dikembalikan adalah nol (FALSE). Untuk informasi kesalahan yang diperluas, hubungi GetLastError.

Kode kesalahan yang diawali oleh "NTE" dihasilkan oleh CSP tertentu yang digunakan. Beberapa kemungkinan kode kesalahan tercantum dalam tabel berikut.

Menampilkan kode Deskripsi
ERROR_CALL_NOT_IMPLEMENTED
Karena ini adalah fungsi baru, CSP yang ada mungkin tidak menerapkannya. Kesalahan ini dikembalikan jika CSP tidak mendukung fungsi ini.
ERROR_INVALID_PARAMETER
Salah satu parameter berisi nilai yang tidak valid. Ini paling sering merupakan pointer yang tidak valid.
NTE_BAD_KEY
Handel ke kunci asli tidak valid.

Keterangan

CryptDuplicateKey membuat salinan kunci dan status kunci yang tepat. Salah satu skenario ketika fungsi ini dapat digunakan adalah ketika aplikasi perlu mengenkripsi dua pesan terpisah dengan kunci yang sama tetapi dengan nilai garam yang berbeda. Kunci asli dihasilkan dan kemudian kunci duplikat dibuat dengan menggunakan fungsi CryptDuplicateKey . Nilai garam yang berbeda kemudian diatur pada kunci asli dan duplikat dengan panggilan terpisah ke fungsi CryptSetKeyParam .

CryptDestroyKey harus dipanggil untuk menghancurkan kunci apa pun yang dibuat dengan menggunakan CryptDuplicateKey. Menghancurkan kunci asli tidak menyebabkan kunci duplikat dihancurkan. Setelah kunci duplikat dibuat, kunci tersebut terpisah dari kunci asli. Tidak ada status bersama di antara dua kunci.

Contoh

Contoh berikut menunjukkan pembuatan kunci sesi yang merupakan duplikat dari kunci sesi yang ada. Untuk contoh yang menyertakan konteks lengkap untuk contoh ini, lihat Contoh Program C: Menduplikasi Kunci Sesi.

//--------------------------------------------------------------------
// Declare and initialize variables.

HCRYPTKEY    hDuplicateKey;

// Duplicate the key. hOriginalKey is a previously 
// assigned HCRYPTKEY variable.

if (CryptDuplicateKey(
     hOriginalKey, 
     NULL, 
     0, 
     &hDuplicateKey))
{
   printf("The session key has been duplicated. \n");
}
else
{
   printf("Error using CryptDuplicateKey.\n");
   exit(1);
}

// Insert code that uses the duplicate key here.

// When you have finished using the key, the handle must be released.

if (CryptDestroyKey(hDuplicateKey))
{
  printf("The handle has been released.\n");
}
else
{
  printf("The handle could not be released.\n");
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Target Platform Windows
Header wincrypt.h
Pustaka Advapi32.lib
DLL Advapi32.dll

Lihat juga

CryptDestroyKey

CryptSetKeyParam

Pembuatan Kunci dan Fungsi Exchange