在使用CryptoAPI对文件进行RC4加密的Microsoft C sample code中,函数CryptGenKey和CryptDeriveKey将传递一个未记录的标记
#define KEYLENGTH 0x00800000
...
if (CryptGenKey(
hCryptProv,
ENCRYPT_ALGORITHM,
KEYLENGTH | CRYPT_EXPORTABLE,
&hKey))
...
CryptoAPI头文件wincrypt.h
中没有定义此值的标志。离开它似乎没有任何伤害。实际上,当我将算法从RC4更改为AES时,使用此标志会生成ERROR_INVALID_PARAMETER
。
它的用途是什么?
答案 0 :(得分:1)
它不是无证件,而且它不是旗帜。从您为CryptGenKey
链接的页面(强调我的):
指定生成的密钥类型。生成密钥时,可以设置会话密钥,RSA签名密钥和RSA密钥交换密钥的大小。 密钥大小,表示密钥模数的长度(以位为单位),使用此参数的高16位进行设置。因此,如果要生成2,048位RSA签名密钥,则值0x08000000将与任何其他dwFlags预定义值组合使用按位或运算。 0x08000000的高16位为0x0800或十进制2,048。 RSA1024BIT_KEY值可用于指定1024位RSA密钥
#define
提供用于表示高16位中密钥模数长度的密钥大小,与上述状态完全相同。您包含的代码示例使用0x00800000
来表示128位密钥。
引用继续解释:
0x08000000的高16位是0x0800,或小数2,048。
密钥大小(在高16位中)与预定义标志值之一的按位OR组合。