2011-04-12 133 views
3

我正在制作一个程序,它为发件人生成密钥对私有和puba,为接收者生成privb和pubb,然后将每个文件导出到文件,这里是我的发件人代码:使用OpenSSL从文件设置私人和公共EC密钥

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和普巴和公众b(十六进制文件pubb)密钥来生成ECDH键和其后的AES密钥。然后密码文件。

我不知道如何获取并将此hex文件转换为公钥以生成ECDH密钥。任何人都可以帮助我吗? THX

回答

0

您的代码示例你生成一个密钥或指定组作为无门,问题出在哪里我不能肯定:

“我不知道怎么去和这种转换hex文件... “您是否在生成文件时遇到问题(例如,keypuba为空或不包含密钥),读取文件时出现问题,还是您不知道如何从此处继续?

仅供参考,OpenSSL无法hex to Big Number转换功能,但是你可能不想手动计算自己短暂的Diffie Hellman参数,如OpenSSL的具有ecies_encrypt()例行程序,需要照顾的那以及ecies_key_public_get_hex(EC_KEY *key)已经采用十六进制输入。

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

除非你是专家并且有充分的理由推出自己的ECIES版本,否则应该使用内建调用。