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