Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El proveedor base solo usó claves simétricas de 40 bits . La adición de claves más largas en el proveedor mejorado y el hecho de que las claves importadas pueden tener una longitud arbitraria requiere un método para consultar la longitud de una clave específica. Para buscar la longitud real de una clave en bits, un usuario puede llamar a CryptGetKeyParam con el valor del parámetro KP_KEYLEN. La longitud de la clave se devuelve en el DWORD de apuntado por el parámetro pbData.
Nota
Para protegerse frente a ataques de cryptanalysis, las aplicaciones deben comprobar si no hay suficientes longitudes de clave y notificar al usuario cuándo se encuentra una.
En el ejemplo siguiente se muestra cómo consultar la longitud de una clave.
#pragma comment(lib, "crypt32.lib")
#include <windows.h>
#include <Wincrypt.h>
#include <stdio.h>
void main()
{
HCRYPTPROV hProv = NULL;
HCRYPTKEY hKey = NULL;
DWORD dwKeyLength;
DWORD dwLen = sizeof(DWORD);
// Copyright (C) Microsoft. All rights reserved.
// Acquire a cryptographic context.
if (!CryptAcquireContext(&hProv,
NULL,
NULL,
PROV_RSA_FULL,
CRYPT_VERIFYCONTEXT))
{
printf("CryptAcquireContext failed.\n");
goto Cleanup;
}
// Generate a key.
if (!CryptGenKey(
hProv,
CALG_RC2,
0,
&hKey))
{
printf("CryptGenKey failed.\n");
goto Cleanup;
}
// Query the key length.
if (!CryptGetKeyParam(
hKey,
KP_KEYLEN,
(BYTE*)&dwKeyLength,
&dwLen,
0))
{
printf("CryptGetKeyParam failed.\n");
goto Cleanup;
}
else
{
printf("The key is %d bits long. \n", dwKeyLength);
}
Cleanup:
if (hKey)
CryptDestroyKey(hKey);
if (hProv)
CryptReleaseContext(hProv, 0);
}