我正在制作一个程序,为发件人生成一个密钥对priva和puba,为接收者生成privb和pubb,然后我将每个导出到一个文件,这是我的发件人代码的一部分:
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(hex文件pubb)键来生成ECDH密钥,然后生成AES密钥。然后加密文件。
我不知道如何获取并将此hex文件转换为公钥以生成ECDH密钥。有人可以帮助我吗? THX
答案 0 :(得分:0)
由于您的代码示例中没有生成密钥或指定组,我无法确定问题所在:
“我不知道如何获取和转换此hex文件......”您是否在生成文件时遇到问题(例如keypuba为空或不包含密钥),读取文件时出现问题,或者您是否只是知道怎么从这里开始吗?
仅供参考,openssl具有hex to Big Number转换函数,但您可能不希望手动计算自己的Ephemeral Diffie Hellman参数,因为OpenSSL有一个ecies_encrypt()
例程来处理它以及{已经采用十六进制输入的{1}}。
不幸的是,openssl库不是作为通用加密API编写的,而是作为实现SSL的模块编写的。开发人员尝试使用openSSL调用时的第一个问题是知道他们应该使用什么接口以及他们不应该使用什么内部接口。
除非您是专家且有令人信服的理由推出自己的ECIES版本,否则您应该使用内置调用。