Especificar un valor de sal
Tanto el proveedor base como el proveedor extendido pueden especificar el valor y la longitud del valor de sal que se va a usar. El proveedor base establece un valor de sal mediante el valor del parámetro KP_SALT. El proveedor base siempre establece once bytes de valor de sal.
El proveedor mejorado establece el valor de sal llamando a CryptSetKeyParam con el valor del parámetro KP_SALT_EX especificado y con el parámetro pbData que apunta a una estructura de CRYPT_INTEGER_BLOB que contiene la sal.
Nota
La longitud total de una clave simétrica del proveedor mejorado y su valor de sal no puede ser superior a 128 bits.
KP_SALT sigue proporcionándose para la compatibilidad con versiones anteriores con el proveedor base. Las aplicaciones más recientes deben usar el valor del parámetro KP_SALT_EX.
En el ejemplo siguiente se establece un valor de sal.
// Specify 4 bytes of salt.
BYTE rgbSalt[] = {0x01, 0x02, 0x03, 0x04};
CRYPT_DATA_BLOB sSaltData;
sSaltData.pbData = rgbSalt;
sSaltData.cbData = sizeof(rgbSalt);
// Set the 4 bytes of salt required.
// hKey is an HCRYPTPROV handle previously
// assigned, such as by CryptImportKey.
if (CryptSetKeyParam(
hKey,
KP_SALT_EX,
(BYTE*)&sSaltData,
0))
{
printf("The salt value is set.\n");
}
else
{
printf("Setting the salt value failed.\n");
}