使用 WinAPI 实现 RSA 的问题
Problem with RSA implementation with WinAPI
所以我在我的软件中使用了 windows 的 CNG 框架(专门用 c 编写的)。
问题是当我尝试在我的代码中实现 RSA 时
代码看起来像这样:
DWORD temp = BCRYPT_SUPPORTED_PAD_OAEP;
BCryptOpenAlgorithmProvider(PointerToAlgorithmProvider, BCRYPT_RSA_ALGORITHM, NULL, 0);
BCryptGenerateKeyPair(ActualAlgorithmProvider, &handleToKeyObject, 2048, 0);
BCryptSetProperty(ActualAlgorithmProvider, BCRYPT_PADDING_SCHEMES, (PUCHAR)&temp, sizeof(DWORD), 0);
.
.
.
不幸的是,BCryptSetProperty
return 出现无效句柄错误。
一个问题是 BCryptSetProperty
的使用不正确。 BCRYPT_SUPPORTED_PAD_OAEP
符号不是变量,它是预处理器宏。
The documentation for BCRYPT_PADDING_SCHEMES
表示“数据类型是 DWORD”,这意味着大小是 4 个字节。
要设置 属性,声明一个本地 DWORD
变量并将地址传递给函数:
DWORD val = BCRYPT_SUPPORTED_PAD_OAEP;
BCryptSetProperty( ActualAlgorithmProvider, BCRYPT_PADDING_SCHEMES, (PUCHAR)(&val), 4, 0 );
开发者确认:BCRYPT_PADDING_SCHEMES
用于检索RSA算法提供商支持的填充方案。如果你想使用一种支持的填充方案(例如 OAEP 填充方案),你可以在 BCryptEncrypt
/BCryptDecrypt
.
中指定 BCRYPT_PAD_OAEP
标志
所以我在我的软件中使用了 windows 的 CNG 框架(专门用 c 编写的)。 问题是当我尝试在我的代码中实现 RSA 时
代码看起来像这样:
DWORD temp = BCRYPT_SUPPORTED_PAD_OAEP;
BCryptOpenAlgorithmProvider(PointerToAlgorithmProvider, BCRYPT_RSA_ALGORITHM, NULL, 0);
BCryptGenerateKeyPair(ActualAlgorithmProvider, &handleToKeyObject, 2048, 0);
BCryptSetProperty(ActualAlgorithmProvider, BCRYPT_PADDING_SCHEMES, (PUCHAR)&temp, sizeof(DWORD), 0);
.
.
.
不幸的是,BCryptSetProperty
return 出现无效句柄错误。
一个问题是 BCryptSetProperty
的使用不正确。 BCRYPT_SUPPORTED_PAD_OAEP
符号不是变量,它是预处理器宏。
The documentation for BCRYPT_PADDING_SCHEMES
表示“数据类型是 DWORD”,这意味着大小是 4 个字节。
要设置 属性,声明一个本地 DWORD
变量并将地址传递给函数:
DWORD val = BCRYPT_SUPPORTED_PAD_OAEP;
BCryptSetProperty( ActualAlgorithmProvider, BCRYPT_PADDING_SCHEMES, (PUCHAR)(&val), 4, 0 );
开发者确认:BCRYPT_PADDING_SCHEMES
用于检索RSA算法提供商支持的填充方案。如果你想使用一种支持的填充方案(例如 OAEP 填充方案),你可以在 BCryptEncrypt
/BCryptDecrypt
.
BCRYPT_PAD_OAEP
标志