CryptGetKeyParam 函数 (wincrypt.h)
语法
BOOL CryptGetKeyParam(
[in] HCRYPTKEY hKey,
[in] DWORD dwParam,
[out] BYTE *pbData,
[in, out] DWORD *pdwDataLen,
[in] DWORD dwFlags
);
参数
[in] hKey
要查询的密钥的句柄。
[in] dwParam
指定要进行的查询的类型。
对于所有键类型,此参数可以包含以下值之一。
价值 | 意义 |
---|---|
|
检索密钥算法。
pbData 参数是指向一个 ALG_ID 值的指针,该值接收创建密钥时指定的算法的标识符。
为 CryptGenKey 函数的 Algid 参数指定 AT_KEYEXCHANGE 或 AT_SIGNATURE 时,用于生成密钥的算法标识符取决于使用的提供程序。 有关详细信息,请参阅 ALG_ID。 |
|
如果会话密钥是由 hKey 参数指定的,请检索密钥密码的块长度。
pbData 参数是指向接收块长度的 DWORD 值的指针。 对于 流密码,此值始终为零。
如果 |
|
pbData 是接收已使用 区分编码规则(DER)编码的 X.509 证书的缓冲区的地址。 证书 中的 公钥 必须与相应的签名或交换密钥匹配。 |
|
不使用此值。 |
|
检索密钥的实际长度。
pbData 参数是指向接收密钥长度的 DWORD 值的指针。
KP_KEYLEN 可用于获取任何键类型的长度。 Microsoft 加密服务提供商(CSP)返回 CALG_DES的密钥长度为 64 位,CALG_3DES_112返回 128 位,CALG_3DES返回 192 位。 这些长度与枚举算法时返回的长度不同,dwParam 值 CryptGetProvParam 函数设置为 PP_ENUMALGS。 此调用返回的长度是密钥的实际大小,包括密钥中包含的奇偶校验位。
Microsoft支持该算法的 CALG_CYLINK_MEKALG_ID 返回 64 位的 CSP。 CALG_CYLINK_MEK 是一个 40 位密钥,但具有奇偶校验和零键位,以使密钥长度为 64 位。 |
|
检索键的 盐值。
pbData 参数是指向 BYTE 数组的指针,该数组接收 little-endian 形式的盐值。 盐值的大小因使用的 CSP 和算法而异。 盐值不适用于 |
|
检索密钥权限。
pbData 参数是指向接收密钥权限标志的 DWORD 值的指针。
当前定义了以下权限标识符。 密钥权限可以是零,也可以是以下一个或多个值的组合。
|
如果 数字签名标准(DSS)密钥是由 hKey 参数指定的,则 dwParam 值也可以设置为以下值之一。
如果 块密码会话密钥 由 hKey 参数指定,则 dwParam 值也可以设置为以下值之一。
价值 | 意义 |
---|---|
|
检索 RC2 密钥的有效密钥长度。 pbData 参数是指向接收有效密钥长度的 DWORD 值的指针。 |
|
检索键的初始化向量。 pbData 参数是指向接收初始化向量的 BYTE 数组的指针。 此数组的大小是块大小,以字节为单位。 例如,如果块长度为 64 位,则初始化向量由 8 个字节组成。 |
|
检索填充模式。 pbData 参数是指向 DWORD 值的指针,该值接收用于标识 密码使用的 填充 方法的数字标识符。 这可以是以下值之一。 |
|
检索 密码模式。
pbData 参数是指向接收密码模式标识符的 DWORD 值的指针。 有关密码模式的详细信息,请参阅 数据加密和解密。
当前定义了以下密码模式标识符。 |
|
检索要回送的位数。 pbData 参数是指向 DWORD 值的指针,该值接收使用 OFB 或 CFB 密码模式时每个周期处理的位数。 |
如果 Diffie-Hellman 算法 或 数字签名算法(DSA)密钥由 hKey指定,则 dwParam 值也可以设置为以下值。
价值 | 意义 |
---|---|
|
验证 Diffie-Hellman 算法或 DSA 密钥的参数。 不使用 pbData 参数,pdwDataLen 指向的值接收零。
如果键参数有效或为零,则此函数返回非零值。 |
|
不使用此值。
Windows Vista、Windows Server 2003 和 Windows XP:从导入的 Diffie-Hellman 算法检索机密协议值CALG_AGREEDKEY_ANY类型的密钥。 pbData 参数是接收机密协议值的缓冲区的地址,格式为 little-endian。 此缓冲区的长度必须与密钥长度相同。 dwFlags 参数必须设置为0xF42A19B6。 此属性只能由在本地系统帐户下运行的线程检索。此属性可用于上面列出的操作系统。 在后续版本中可能会更改或不可用。 |
如果证书由 hKey指定,则 dwParam 值也可以设置为以下值。
价值 | 意义 |
---|---|
|
包含 DER 编码 X.509 证书的缓冲区。 不使用 pbData 参数,pdwDataLen 指向的值接收零。
如果键参数有效或为零,则此函数返回非零值。 |
[out] pbData
指向接收数据的缓冲区的指针。 此数据的形式取决于 dwParam的值。
如果此缓冲区的大小未知,则可以在运行时检索所需的大小,方法是传递此参数的 NULL 并将 pdwDataLen 指向的值设置为零。 此函数会将缓冲区的所需大小(以字节为单位)放在 pdwDataLen指向的值中。 有关详细信息,请参阅 检索未知长度的数据。
[in, out] pdwDataLen
指向 DWORD 值的指针,该值包含 pbData 参数指向的缓冲区的大小(以字节为单位)。 函数返回时,DWORD 值包含缓冲区中存储的字节数。
[in] dwFlags
此参数保留供将来使用,必须设置为零。
返回值
如果函数成功,该函数将返回非零。
如果函数失败,则返回零。 有关扩展错误信息,请调用 GetLastError。
“NTE”开头的错误代码由正在使用的特定 CSP 生成。 一些可能的错误代码包括以下内容。
返回代码 | 描述 |
---|---|
|
其中一个参数指定无效的句柄。 |
|
其中一个参数包含无效的值。 这通常是无效的指针。 |
|
如果由 pbData 参数指定的缓冲区不够大来容纳返回的数据,则函数将设置 ERROR_MORE_DATA 代码,并将所需的缓冲区大小(以字节为单位)存储在由 pdwDataLen指向的变量中。 |
|
dwFlags 参数为非零。 |
|
hKey 参数指定的键无效。 |
|
dwParam 参数指定未知值数。 |
|
找不到创建密钥时指定的 CSP 上下文。 |
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows XP [仅限桌面应用] |
支持的最低服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | 窗户 |
标头 | wincrypt.h |
库 | Advapi32.lib |
DLL | Advapi32.dll |