Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenSSL:使用ECC公钥加密对称密钥_C++_C_Encryption_Cryptography_Public Key Encryption - Fatal编程技术网

C++ OpenSSL:使用ECC公钥加密对称密钥

C++ OpenSSL:使用ECC公钥加密对称密钥,c++,c,encryption,cryptography,public-key-encryption,C++,C,Encryption,Cryptography,Public Key Encryption,我有一个对称密钥,我想使用OpenSSL用ECC公钥加密。在它的高级部分,EVP,OpenSSL来加密“信封”,这正是我所需要的 然而,我希望将它们分为单独的步骤,而不是像OpenSSL在EVP中提供的那样全部放在一个步骤中。我想控制我自己用OpenSSL加密对称密钥,并用我自己的C++包装加密消息,并将它们都以我所选择的格式。 如何使用OpenSSL使用公钥加密刚刚对称的密钥,而不让它同时加密消息?这可行吗 在提供的示例中,我尝试使用零长度的明文,但它崩溃了。这可能吗 如果不是,我如何在没有E

我有一个对称密钥,我想使用OpenSSL用ECC公钥加密。在它的高级部分,EVP,OpenSSL来加密“信封”,这正是我所需要的

然而,我希望将它们分为单独的步骤,而不是像OpenSSL在EVP中提供的那样全部放在一个步骤中。我想控制我自己用OpenSSL加密对称密钥,并用我自己的C++包装加密消息,并将它们都以我所选择的格式。

如何使用OpenSSL使用公钥加密刚刚对称的密钥,而不让它同时加密消息?这可行吗

在提供的示例中,我尝试使用零长度的明文,但它崩溃了。这可能吗


如果不是,我如何在没有EVP的情况下使用公钥进行加密,而EVP使用的是
EC_密钥

与RSA不同,ECC不能直接执行加密和解密

这样做的首选方法是创建一个临时ECC密钥对,并使用您的私钥和接收方的公钥创建一个共享密钥来加密消息。然后将加密的消息与创建的ECC公钥一起发送。该方案称为ECIES(椭圆曲线集成加密方案)


您需要调用
ECDH_compute_key
来创建共享密钥,并将您的临时私钥和接收方的公钥以及指向您定义的密钥派生函数(KDF)的指针传递给它。最简单的KDF是ECDH计算输出的x坐标的散列。无论您使用何种方案,另一方都需要就正在使用的KDF达成一致。

不完全确定您为什么要走这条路,但应该做您想做的事情,假设您使用的是RSA密钥。这是一个直接的API。虽然这对您来说并不重要,因为您只是在加密一个简单的会话密钥,但始终值得一提的是,要确保数据大小至少比密钥的模数大小小11字节。@WhozCraig抱歉,我应该说清楚,我会更新这个问题。我想用ECC加密(我的密钥类型是
EC\u-key
)。ECC是否有一个等价的函数?如果有,我还没有看到。我不使用ECC,因为坦率地说,到今天为止,我仍然无法理解短暂的密钥生成、HMAC等。几年前,当我开始研究它们时,我读到的第一件事是“ECC并不是真正用于加密/解密的;但有一些使用ECC的算法”我的头脑开始膨胀。但愿我能帮助你。很不幸,这不是我的选择。密钥已经存在,我必须使用它们进行加密。无论如何,谢谢:-)您实际上是在尝试使用ECC加密,还是在尝试使用ECC生成共享密钥,即ECDH(椭圆曲线Diffie-Hellman)?