Nouvelles fonctionnalités de longueur de clé
Le fournisseur de base a utilisé uniquement des clés symétriques40 bits. L’ajout de clés plus longues dans le fournisseur amélioré et le fait que les clés importées peuvent être de longueur arbitraire nécessitent une méthode d’interrogation de la longueur d’une clé spécifique. Pour rechercher la longueur réelle d’une clé en bits, un utilisateur peut appeler CryptGetKeyParam avec la _ valeur de paramètre KP KEYLEN. La longueur de la clé est retournée dans la valeur DWORD désignée par le paramètre pbData .
Notes
Pour vous protéger contre les attaques Cryptanalysis pas à pas, les applications doivent vérifier les longueurs de clé insuffisantes et notifier l’utilisateur lorsqu’il rencontre une erreur.
L’exemple suivant montre comment interroger la longueur d’une clé.
#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);
}