Winapi 用OpenSSL解密Windows Crypto API RSA密文 我创建了一个C++程序,用RSA 2048密钥加密一些字节。

Winapi 用OpenSSL解密Windows Crypto API RSA密文 我创建了一个C++程序,用RSA 2048密钥加密一些字节。,winapi,cryptography,openssl,endianness,Winapi,Cryptography,Openssl,Endianness,程序的输出是256字节,一切似乎都很正常 然而,我完全无法弄清楚如何用openssl对其进行解密 有人告诉我,我可能需要颠倒字节顺序,使其成为big-endian,但这似乎没有帮助。(我假设颠倒字节顺序意味着将1F 02 C8转换为F1 20 8C等) 我主要从openssl得到以下错误 openssl rsautl-in output.bin-inkey privatekey-decrypt rsa例程:rsa_padding_check_PKCS1_type_2:块类型不是02:rsa_pk

程序的输出是256字节,一切似乎都很正常

然而,我完全无法弄清楚如何用openssl对其进行解密

有人告诉我,我可能需要颠倒字节顺序,使其成为big-endian,但这似乎没有帮助。(我假设颠倒字节顺序意味着将1F 02 C8转换为F1 20 8C等)

我主要从openssl得到以下错误

openssl rsautl-in output.bin-inkey privatekey-decrypt rsa例程:rsa_padding_check_PKCS1_type_2:块类型不是02:rsa_pk1.c:190:

下面是我的加密代码片段,供感兴趣的人参考(我也尝试过将final设置为true)


任何帮助都将不胜感激,

首先,从小端到大端,并不是你所做的,而是你所做的!那是错误的。在转换过程中,0x1F02C800变为0x00C8021F。现在,除此之外,不要在缓冲区中放什么,而是显示有关在windows API和openssl之间使用的公钥和私钥的更多详细信息。您确定使用了正确的公钥和私钥吗?请小心Windows
PRIVATEKEYBLOB
(我想这就是它的名称)。实际上,它的endian已交换,因此您可以使用little endian而不是big endian来获取整个数组(big endian几乎在其他任何地方和其他库中都使用)。
BYTE crapBuffer[1200] = {0x33,0x1F,0x22,0x34,0x33,0x1F,0x22,0x34,0x33,0x1F,0x22,0x34,0x33,0x1F,0x22,0x34,0x33,0x1F,0x22,0x34};
DWORD dataLen = 20;
CryptEncrypt(publicKey,0,false,0,(BYTE *)crapBuffer,&dataLen,1200);