openssl0.9.8編程產生RSA金鑰組(探討篇)(windows XP SP2+VC6.0)

來源:互聯網
上載者:User
openssl是一套被廣泛利用的開放原始碼SSL實現,它不光實現了SSL,還給出了許多有用的相關工具,如產生RSA金鑰組、產生認證請求,以及小型CA等等。我們一般通過openssl指令來使用這些小工具,有沒有辦法直接調用openssl的函數來實現這些功能呢?答案是肯定的。

今天介紹的是如何利用openssl編程產生RSA金鑰組。最簡單的方法是使用系統調用:exec("openssl rsa -generate")……(無數只腳踏下來……)開個小小的玩笑而已,接下來進入正題。

首先要明確的一點是:openssl0.9.8和openssl0.9.7的檔案結構有明顯的區別,openssl0.9.8增加了若干個標頭檔,以及一些新的介面;剩下與openssl0.9.7同名的標頭檔,內容也有改動。就拿產生RSA金鑰組來說,openssl0.9.8就提供了一個與openssl0.9.7完全不同的介面:
int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb);
其中各個參數的含義是這樣的:
RSA *rsa:存放產生的金鑰組的資料結構指標,需要事先分配空間;
int bits:金鑰組的位元組數,一般用2的指數如512,1024;
BIGNUM *e:RSA密鑰產生演算法中要求的大數的指標,需要事先初始化;BN_GENCB *cb:暫時沒搞明白……;

最關鍵的是RSA *rsa,產生的金鑰組就儲存在這裡。
各個參數的初始化方法如下:
rsa = RSA_new();
out=BIO_new(BIO_s_file());
(還有一個版本是:BIO *tmpbio = BIO_new(BIO_f_linebuffer());out = BIO_push(tmpbio, out);不知道哪一個對,期待下一步實驗)
BN_GENCB *cb;直接定義一個靜態變數即可
參數bn的設定:
BN_set_word(bn, 0x10001);
可以設成65537或者3,前者用得比較多。

設定好上述參數之後,就可以產生RSA金鑰組了。如果使用EVP_PKEY_assign_RSA()和PEM_write_bio_PrivateKey()這兩個介面,還可以把私密金鑰匯出為用口令加密的PEM檔案。這兩個介面還在實驗中……

再強調一點,openssl0.9.8源檔案中的include目錄和inc32目錄區別很大,在windows下編譯必須使用inc32目錄,否則會報錯。(俺就是吃了這個虧……5555)

順路說一下,openssl0.9.8向下相容了openssl0.9.7的密鑰產生介面:
RSA * RSA_generate_key(int bits, unsigned long e,void  (*callback)(int,int,void *),void *cb_arg);
顯然新的密鑰產生函數更加簡潔。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.