c - 使用文件中的 OpenSSL 设置私钥和公钥 EC key

标签 c file openssl key set

我正在制作一个程序,它为发送方生成 key 对 priva 和 puba,为接收方生成 privb 和 pubb,然后我将每个 key 对导出到一个文件,这是我为发送方编写的部分代码:

BIGNUM *ppub_a,*ppriv_a;    
point = EC_KEY_get0_public_key(a);
ppub_a = EC_POINT_point2bn(group, point, POINT_CONVERSION_UNCOMPRESSED, ppub_a, ctx);
int kk, kk2;
ppriv_a = EC_KEY_get0_private_key(a);
kk = BN_print_fp(keypuba,ppub_a);
kk2 = BN_print_fp(keypriva, ppriv_a);

我需要这对 priva 和 puba 以及公共(public) b(十六进制文件 pubb) key 来生成 ECDH key ,然后生成 AES key 。然后加密一个文件。

我不知道如何获取此 hex 文件并将其转换为公钥以生成 ECDH key 。有人可以帮助我吗?谢谢

最佳答案

由于您的代码示例中没有任何地方生成 key 或指定组,我无法确定问题出在哪里:

“我不知道如何获取和转换此十六进制文件...”您是否在生成文件时遇到问题(例如 keypuba 为空或不包含 key )、读取文件时遇到问题,或者您只是没有知道如何从这里开始?

仅供引用,openssl 有 hex to Big Number转换函数,但是您可能不想手动计算自己的 Ephemeral Diffie Hellman 参数,因为 OpenSSL 有一个 ecies_encrypt()处理此问题的例程以及已经采用十六进制输入的 ecies_key_public_get_hex(EC_KEY *key)

不幸的是,openssl 库不是作为通用加密 API 编写的,而是作为实现 SSL 的模块编写的。当开发人员尝试使用 openSSL 调用时,第一个问题是知道他们应该使用什么接口(interface),什么是他们不应该使用的内部接口(interface)。

除非您是专家并且有令人信服的理由推出您自己的 ECIES 版本,否则您应该使用内置调用。

关于c - 使用文件中的 OpenSSL 设置私钥和公钥 EC key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5634618/

相关文章:

c - 如何修改内核DTB文件

c - 为什么我的消费者线程在我的生产者线程完成之前就停止了?

java - 导出时不以 Unicode 格式写入

c - C 中文件光标移动两行

windows - 无法找到基于Windows的OpenSSL依赖关系构建

c# - OpenSSL 错误 "data greater than mod len"

c - ctl_putdata()中的NTP缓冲区溢出

c - 函数返回二维指针无法从中获取值

php - 随机播放并显示 .txt 文件的内容

c++ - 使用 OpenSSL 库将 C++ 中的 BIO* 转换为 PKCS7*