The CryptGenKey function generates random cryptographic keys for use with the CSP module. A handle to the key is returned in phKey. This handle can then be used as needed with any of the other CryptoAPI functions requiring key handles.
The calling application is required to specify the algorithm when calling this function. Because this algorithm type is kept bundled with the key, the application does not need to specify the algorithm later when the actual cryptographic operations are performed.
BOOL CRYPTFUNC CryptGenKey(
HCRYPTPROV hProv, | |
ALG_ID Algid, | |
DWORD dwFlags, | |
HCRYPTKEY *phKey | |
); |
The valid values for this parameter will vary, depending on the CSP that is
used. See the “Remarks” section for a list of possible algorithm identifiers.
If this flag is not set, then the key will not be exportable. For a session key, this means that the key will only be available within the current session and only the application that created it will be able to use it. For a public/private key pair, this means that the private key cannot be transported or backed up.
This flag only applies to session key and private key blobs. It does not apply
to public keys, which are always exportable.
If this flag is not set, then the key will be given a salt value of zero.
When keys with non-zero salt values are exported (through CryptExportKey),
then the salt value must also be obtained and kept with the key blob.
The Microsoft RSA Base Provider ignores this flag.
To generate a key to be used with a symmetric encryption algorithm (that is, a session key), use the Algid parameter to specify the algorithm. The algorithms available will most likely be different for each CSP. If you are using the Microsoft RSA Base Provider, one of the following values can be used to specify the algorithm:
When keys are generated for symmetric block ciphers, the key by default will be set up in cipher block chaining (CBC) mode with an initialization vector of zero. This cipher mode provides a good default method for bulk encrypting data. To change these parameters, use the CryptSetKeyParam function.
In addition to generating keys for symmetric algorithms, the CryptGenKey function can also generate keys for public-key algorithms. The use of public-key algorithms is restricted to key exchange and digital signatures. Each CryptoAPI client generally possesses one key pair for each of these operations. To generate one of these key pairs, set the Algid parameter to one of the following values:
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To retrieve extended error information, use the GetLastError function.
The following table lists the error codes most commonly returned by the GetLastError function. The error codes prefaced by “NTE” are generated by the particular CSP you are using.
Error |
Description |
ERROR_INVALID_HANDLE |
One of the parameters specifies an invalid handle. |
ERROR_INVALID_PARAMETER |
One of the parameters contains an invalid value. This is most often an illegal pointer. |
NTE_BAD_ALGID |
The Algid parameter specifies an algorithm that this CSP does not support. |
NTE_BAD_FLAGS |
The dwFlags parameter contains an invalid value. |
NTE_BAD_UID |
The hProv parameter does not contain a valid context handle. |
NTE_FAIL |
The function failed in some unexpected way. |
#include <wincrypt.h> HCRYPTPROV hProv = 0; HCRYPTKEY hKey = 0; // Get handle to user default provider. if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) { printf("Error %x during CryptAcquireContext!\n", GetLastError()); goto done; } // Create block cipher session key. if(!CryptGenKey(hProv, CALG_RC2, CRYPT_EXPORTABLE, &hKey)) { printf("Error %x during CryptGenKey!\n", GetLastError()); goto done; } // Use ‘hKey’ to do something. ... done: // Destroy session key. if(hKey != 0) CryptDestroyKey(hKey); // Release provider handle. if(hProv != 0) CryptReleaseContext(hProv, 0);
CryptAcquireContext, CryptDestroyKey, CryptExportKey, CryptGetKeyParam, CryptImportKey, CryptSetKeyParam
file: /Techref/os/win/api/win32/func/src/f12_5.htm, 9KB, , updated: 2000/4/7 11:19, local time: 2024/11/14 01:56,
18.226.214.1:LOG IN
|
©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions? <A HREF="http://linistepper.com/Techref/os/win/api/win32/func/src/f12_5.htm"> CryptGenKey Release 2]</A> |
Did you find what you needed? |