C 使用WinAPI实现RSA时出现问题
因此,我在我的软件中使用了来自windows的CNG框架(专门用c编写)。 问题是当我试图在代码中实现RSA时 代码如下所示:C 使用WinAPI实现RSA时出现问题,c,windows,winapi,bcrypt,C,Windows,Winapi,Bcrypt,因此,我在我的软件中使用了来自windows的CNG框架(专门用c编写)。 问题是当我试图在代码中实现RSA时 代码如下所示: DWORD temp = BCRYPT_SUPPORTED_PAD_OAEP; BCryptOpenAlgorithmProvider(PointerToAlgorithmProvider, BCRYPT_RSA_ALGORITHM, NULL, 0); BCryptGenerateKeyPair(ActualAlgorithmPro
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
返回时出现无效句柄错误。一个问题是BCryptSetProperty
的使用不正确。BCRYPT\u SUPPORTED\u PAD\u OAEP
符号不是一个变量,它是一个预处理器宏
对于BCRYPT\u PADDING\u方案
说“数据类型是DWORD”,这意味着大小是4字节
要设置该属性,请声明一个本地DWORD
变量并将地址传递给函数:
DWORD val = BCRYPT_SUPPORTED_PAD_OAEP;
BCryptSetProperty( ActualAlgorithmProvider, BCRYPT_PADDING_SCHEMES, (PUCHAR)(&val), 4, 0 );
开发者确认:
BCRYPT\u PADDING\u SCHEMES
用于检索RSA算法提供程序支持的填充方案。如果要使用受支持的填充方案之一(例如OAEP填充方案),可以在/中指定BCRYPT\u PAD\u OAEP
标志。首先,感谢您的回复。不幸的是,该函数仍然返回无效_HANDLE@TheAsker是的,这就是为什么我从“一个问题是”:-)不幸的是,你发布的代码没有说明全部情况,即你如何初始化你的PointerToAlgorithmProvider
和ActualAlgorithmProvider
变量,希望它能对这种情况有更多的了解。根据评论,这似乎是针对BCryptGetProperty
。您是否在内核模式下尝试过,用BCRYPT\u PROV\u DISPATCH
打开提供程序句柄?