Microsoft CryptoAPI文件加密示例中的这个未记录的标志是什么?

时间:2014-02-27 21:38:57

标签: cryptoapi mscapi

在使用CryptoAPI对文件进行RC4加密的Microsoft C sample code中,函数CryptGenKeyCryptDeriveKey将传递一个未记录的标记

#define KEYLENGTH     0x00800000
...
if (CryptGenKey(
        hCryptProv, 
        ENCRYPT_ALGORITHM, 
        KEYLENGTH | CRYPT_EXPORTABLE, 
        &hKey))
...    

CryptoAPI头文件wincrypt.h中没有定义此值的标志。离开它似乎没有任何伤害。实际上,当我将算法从RC4更改为AES时,使用此标志会生成ERROR_INVALID_PARAMETER

它的用途是什么?

1 个答案:

答案 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组合。