2011-04-12 206 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版本,否則應該使用內建調用。