青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 5  文章 - 2  trackbacks - 0
<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

There can be no Triumph without Loss,No Victory without Suffering,No Freedom without Sacrifice. All you have to decide is what to do with the time that is given to you. Get busy Living, or Get busy Dying?

常用鏈接

留言簿

隨筆分類(4)

隨筆檔案(5)

文章分類(88)

文章檔案(10)

Andriod

Language

OpenCV&OpenSSLink

OpenSource

Others

Python&Ruby

WP7

WTL

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

OpenSSL 使用指南

http://www.fs2you.com/files/5b43b3b0-5e3d-11dd-9b38-0019d11a795f/?

?

目錄

?? 介紹

?? 編譯

?? 運行 OpenSSL.exe

?? 算法編程 API

4.1 對稱算法

4.1.1 DES

4.1.2 A ES

4.1.3 RC4

4.1.4 EVP_

4.2 公鑰算法

4.3 Hash 算法

4.4 隨機數算法

?? SSL 協議編程 API

?? CA 和證書

?? ?

?? 參考網址

?? ?

?? 示例程序

?? ?


?

?? 介紹

OpenSSL 是使用非常廣泛的 SSL 的開源實現。由于其中實現了為 SSL 所用的各種加密算法,因此 OpenSSL 也是被廣泛使用的加密函數庫。

1.1 SSL

SSL(Secure Socket Layer) 安全協議是由 Netscape 公司首先提出,最初用在保護 Navigator 瀏覽器和 Web 服務器之間的 HTTP 通信 ( 即 HTTPS) 。后來 SSL 協議成為傳輸層安全通信事實上的標準,并被 IETF 吸收改進為 TLS(Transport Layer Security) 協議。

SSL/TLS 協議位于 TCP 協議和應用層協議之間,為傳輸雙方提供認證、加密和完整性保護等安全服務。 SSL 作為一個協議框架,通信雙方可以選用合適的對稱算法、公鑰算法、 MAC 算法等密碼算法實現安全服務。

1.2 OpenSSL

OpenSSL 是著名的 SSL 的開源實現,是用 C 語言實現的。

OpenSSL 的前身是 SSLeay ,一個由 Eric Young 開發的 SSL 的開源實現,支持 SSLv2/v3 和 TLSv1 。

伴隨著 SSL 協議的普及應用, OpenSSL 被廣泛應用在基于 TCP/Socket 的網絡程序中,尤其是 OpenSSL 和 Apache 相結合,是很多電子商務網站服務器的典型配置。

?

?? 編譯和安裝 OpenSSL

OpenSSL 開放源代碼,這對學習、分析 SSL 和各種密碼算法提供了機會,也便于在上面進一步開發。

2.1 獲得 OpenSSL

到 OpenSSL 的網站即可下載當前版本的 OpenSSL 源代碼壓縮包。

當前版本 openssl- 0.9.8 .tar.gz ,只有 3M 多,比較精簡。解壓縮后得到一個目錄 openssl-0.9.8 ,共有約 1800 個文件, 15M 。其中 crypto 子目錄中是眾多密碼算法實現, ssl 子目錄中是 SSL 協議的實現。

在 Linux 中解壓縮:

$tar zxf openssl- 0.9.8 .tar.gz

在 Windows 中可以使用 winzip 或 winrar 。

2.2 編譯工具

編譯 OpenSSL 需要 Perl 和 C 編譯器。在 Windows 下如果要用加密算法的匯編代碼實現,還需要 masm 或 nasm 匯編器。 ( 匯編代碼可以比 C 代碼顯著提高密碼運算速度 )

Perl 在 Windows 下推薦使用 Active Perl 。

C 編譯器可以使用 gcc 。在 W indows 下可以使用 Visual C 編譯器。

匯編器推薦使用 nasm 。

這些工具所在目錄必須加入到 PATH 環境變量中去。

2.3 編譯和安裝步驟

查看 readme 是個好習慣。從 readme 了解到需要進一步查看 INSTALL 和 INSTALL.W32 文件。

在 Windows 中:

>perl Configure VC-WIN32

>ms\do_nasm ( 如果不使用匯編代碼實現,則可 >ms\do_ms)

>nmake -f ms\ntdll.mak

>cd out32dll

>..\ms\test

編譯結果得到頭文件、鏈接庫、運行庫和 openssl.exe 工具。頭文件位于 ./inc32 或者 ./inculde 目錄,有一個 openssl 子目錄,內有幾十個 .h 文件。鏈接庫即 ./out32dll 目錄中的 libeay32.lib 和 ssleay32.lib ,分別是密碼算法相關的和 ssl 協議相關的。運行庫是 ./out32dll 目錄中的 libeay32.dll 和 ssleay32.dll ,和鏈接庫相對應。在 ./out32dll 中還有一個工具 openssl.exe ,可以直接用來測試性能、產生 RSA 密鑰、加解密文件,甚至可以用來維護一個測試用的 CA 。

在 Linux 中的編譯和安裝步驟較簡單 :

$./config

$make

$make test

$make install

在 Linux 下,頭文件、庫文件、工具都已被安裝放到了合適的位置。庫文件是 .a 或 .so 格式。

?

?? 使用 OpenSSL.exe

使用 OpenSSL.exe(Linux 中可執行文件名是 openssl) 可以做很多工作,是一個很好的測試或調試工具。

3.1 版本和編譯參數

顯示版本和編譯參數: >openssl version -a

3.2 支持的子命令、密碼算法

查看支持的子命令: >openssl ?

SSL 密碼組合列表: >openssl ciphers

3.3 測試密碼算法速度

測試所有算法速度: >openssl speed

測試 RSA 速度: >openssl speed rsa

測試 DES 速度: >openssl speed des

3.4 RSA 密鑰操作

產生 RSA 密鑰對: >openssl genrsa -out 1.key 1024

取出 RSA 公鑰: >openssl rsa -in 1.key -pubout -out 1.pubkey

3.5 加密文件

加密文件: >openssl enc -e -rc4 -in 1.key -out 1.key.enc

解密文件: >openssl enc -d -rc4 -in 1.key.enc -out 1.key.dec

3.6 計算 Hash 值

計算文件的 MD5 值: >openssl md5 < 1.key

計算文件的 SHA1 值: >openssl sha1 < 1.key

?

?? 算法編程 API

OpenSSL 中支持眾多的密碼算法,并提供了很好的封裝和接口。密碼算法主要分為如下幾類:對稱算法、公鑰算法、散列算法、隨機數產生算法等。

OpenSSL 的目標是實現安全協議。其中相關協議和標準包括: SSL/TLS 、 PKCS#1 、 PCKS#10 、 X.509 、 PEM 、 OCSP 等。

4.1 對稱算法接口

OpenSSL 中實現的對稱算法太多,舉三個例子: DES 、 AES 、 RC4 。

4.1.1 DES

DES 加密算法是分組算法。 DES 的基本操作是把 64 比特明文在 56 比特密鑰指引下加密成 64 比特密文。在實際使用中把密鑰看作 64 比特可以更方便。

DES ( IN , KEY ) = OUT

(1) DES ECB 模式

在 OpenSSL 中 ECB 操作模式對應的函數是 DES_ecb_encrypt() ,該函數把一個 8 字節明文分組 input 加密成為一個 8 字節密文分組 output 。參數中密鑰結構 ks 是用函數 DES_set_key() 準備好的,而密鑰 key 是用隨機數算法產生的 64 個隨機比特。參數 enc 指示是加密還是解密。該函數每次只加密一個分組,因此用來加密很多數據時不方便使用。

void DES_ecb_encrypt(const_DES_cblock *input,DES_cblock *output, DES_key_schedule *ks,int enc);

int DES_set_key(const_DES_cblock *key,DES_key_schedule *schedule);

(2) DES CBC 模式

DES 算法 CBC 操作模式加解密函數是 DES_ncbc_encrypt() 。參數 length 指示輸入字節長度。如果長度不是 8 字節的倍數,則會被用 0 填充到 8 字節倍數。因此,輸出可能比 length 長,而且必然是 8 字節的倍數。

void DES_ncbc_encrypt(const unsigned char *input,unsigned char *output, long length, DES_key_schedule *schedule, DES_cblock *ivec, int enc);

(3) DES CFB 模式

DES 算法 CFB 操作模式加解密函數是 DES_cfb_encrypt() 。參數 length 指示輸入字節長度。參數 numbits 則指示了 CFB 每次循環加密多少明文比特,也即密文反饋的比特數目。 ivec 是初始向量,被看做第 0 個密文分組,是不用保密但應隨機取值的 8 個字節。如果在一次會話中數次調用 DES_cfb_encrypt() ,則應該記憶 ivec 。由于 CFB 模式中每次 DES 基本操作只加密 numbits 比特明文,因此如果 numbits 太小則效率太低。

void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, long length, DES_key_schedule *schedule, DES_cblock *ivec, int enc);

另有一個 numbit 是 64 比特的版本,既高效又沒有填充的麻煩,推薦使用。 num 中的返回值指示了 ivec 中的狀態,是和下次調用銜接的。

void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *schedule, DES_cblock *ivec, int *num, int enc) ;

(4) DES OFB 模式

OFB 和 CFB 類似,也有兩個函數,用法一樣。

void DES_ofb_encrypt(const unsigned char *in,unsigned char *out,int numbits,long length,DES_key_schedule *schedule,DES_cblock *ivec);

void DES_ofb64_encrypt(const unsigned char *in,unsigned char *out,long length,DES_key_schedule *schedule,DES_cblock *ivec,int *num);

(5) DES 函數示例程序

見附件 A.1 。

4.1.2 A ES

AES 加密算法是分組算法。典型參數的 AES 的基本操作是把 128 比特明文在 128 比特密鑰指引下加密成 128 比特密文。

AES ( IN , KEY ) = OUT

OpenSSL 中關于 AES 的函數名和參數接口和 DES 的雷同。相關函數名如下 ( 參數略 ) 。

int AES_set_encrypt_key();

int AES_set_decrypt_key();

void AES_ecb_encrypt();

void AES_cbc_encrypt();

void AES_cfb128_encrypt();

void AES_ofb128_encrypt();

AES 示例程序見附件 A.2 。

4.1.3 RC4

RC4 密碼算法是流算法,也叫序列算法。流算法是從密鑰作為種子產生密鑰流,明文比特流和密鑰流異或即加密。 RC4 算法由于算法簡潔,速度極快,密鑰長度可變,而且也沒有填充的麻煩,因此在很多場合值得大力推薦。

OpenSSL 中 RC4 算法有兩個函數 : RC4_set_key() 設置密鑰, RC4() 加解密??梢园?RC4 看作異或,因此加密兩次即解密。

void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data);

void RC4(RC4_KEY *key, unsigned long len, const unsigned char *indata, unsigned char *outdata);

RC4 示例程序見附件 A.3 。

例子 A.3.(1) 是利用 OpenSSL 動態庫函數。例子 A.3.(2) 是把 RC4 的實現代碼從 OpenSSL 中分離出來的。例子 A.3.(3) 是另一個演示實現。

4.2 公鑰算法

OpenSSL 中實現了 RSA 、 DSA 、 ECDSA 等公鑰算法。

4.2.1 RSA

RSA 是分組算法,典型的密鑰模長度 1024 比特時,分組即是 1024 比特,即 128 字節。

(1) RSA 密鑰

RSA 密鑰產生函數 RSA_generate_key() ,需要指定模長比特數 bits 和公鑰指數 e 。另外兩個參數為 NULL 即可。

RSA * RSA_generate_key(int bits, unsigned long e, void (*callback) (int,int,void *),void *cb_arg);

如果從文件中讀取密鑰,可使用函數 PEM_read_bio_PrivateKey()/ PEM_read_bio_PUBKEY(); EVP_PKEY 中包含一個 RSA 結構,可以引用。

EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u);

(2) RSA 加密解密

RSA 加密函數 RSA_public_encrypt() 使用公鑰部分,解密函數 RSA_private_decrypt() 使用私鑰。填充方式常用的有兩種 RSA_PKCS1_PADDING 和 RSA_PKCS1_OAEP_PADDING 。出錯時返回 -1 。輸入必須比 RSA 鑰模長短至少 11 個字節(在 RSA_PKCS1_PADDING 時?)。輸出長度等于 RSA 鑰的模長。

int RSA_public_encrypt(int flen, const unsigned char *from,unsigned char *to, RSA *rsa,int padding);

int RSA_private_decrypt(int flen, const unsigned char *from,unsigned char *to, RSA *rsa,int padding);

(3) 簽名和驗證

簽名使用私鑰,驗證使用公鑰。 RSA 簽名是把被簽署消息的散列值編碼后用私鑰加密,因此函數中參數 type 用來指示散列函數的類型,一般是 NID_md5 或 NID_sha1 。正確情況下返回 0 。

int RSA_sign(int type, const unsigned char *m, unsigned int m_length, unsigned char *sigret, unsigned int *siglen, RSA *rsa);

int RSA_verify(int type, const unsigned char *m, unsigned int m_length, unsigned char *sigbuf, unsigned int siglen, RSA *rsa);

(4) RSA 函數示例程序

RSA 示例程序見附件 A.4 。

例子 A.4.(1) 是加密解密例子。例子 A.4.(2) 是簽名驗證例子。

4.2.2 DSA

( TOBE )

4.2.2 ECDSA

( or NOT TOBE )

4.3 Hash 算法

Hash 算法舉 MD5 和 SHA1 兩個例子。 Hash 算法重復接收用戶輸入,直到最后一次結束時輸出散列結果。

4.3.1 MD5

MD5 算法輸出的散列值是 16 字節。

int MD5_Init(MD5_CTX *c);

int MD5_Update(MD5_CTX *c, const void *data, size_t len);

int MD5_Final(unsigned char *md, MD5_CTX *c);

4.3.2 SHA1

SHA1 算法輸出的散列值是 20 字節。

int SHA1_Init(SHA_CTX *c);

int SHA1_Update(SHA_CTX *c, const void *data, size_t len);

int SHA1_Final(unsigned char *md, SHA_CTX *c);

4.3.3 MD5 例子

MD5 示例程序見附件 A.5 。

md5sum 這是一個實用小工具,可以計算一個文件的 MD5 值。

4.4 隨機數算法

隨機性是密碼安全的基石。為了產生安全的偽隨機數,必須有好的隨機因素作為種子。 OpenSSL 在內部做了努力,但是仍建議在實用隨機數產生函數之前添加隨機因素。

函數 RAND_add() 可以添加隨機因素到內部狀態中去。然后,即可以使用 RAND_bytes() 獲得隨機數。

void RAND_add(const void *buf,int num,double entropy);

int RAND_bytes(unsigned char *buf,int num);

?

?? SSL 協議編程 API

5.1 客戶端

5.2 服務器端

5.3 SSL 示例程序

參見 A.6 。

?

?? CA 和證書

6.1 OpenSSL 中 CA 的配置

6.2 配置示例

參見 A.7.(1) 。

6.3 證書解析

6.4 解析示例程序

參見 A.7.(2) 。

?

?? ?

?

?? 參考網址

SSL 3.0 Specification

http://www.netscape.com/eng/ssl3/

Transp ort Layer Security (tls) Charter

http://www.ietf.org/html.charters/tls-charter.html

OpenSSL: The Open Source toolkit for SSL/TLS

http://www.openssl.org/

SSLeay

http://www2.psy.uq.edu.au/~ftp/Crypto/

OpenSSL 中文論壇

http://openssl.cn/

Perl

http://www.cpan.org/src/README.html

http://www.activestate.com/Products/ActivePerl/

NASM

http://www.perl.com/

studio

?

?? ?

?

?? 示例程序

注 : 此嵌入的文件對象可以被拖放到磁盤目錄中去。


?? DES 示例程序

?? AES 示例程序


?? RC4 示例程序

( 1 ). ( 2 ). ( 3 )

?? RSA 示例程序

( 1 ). ( 2 ).

?? Hash 算法示例程序

?? SSL 示例程序

?? CA 配置示例和證書解析示例程序

(1). (2).

?? ?

?? ?

引自:http://www.cnblogs.com/ahuo/archive/2008/07/30/1256820.html

posted on 2011-02-28 09:42 jemmyLiu 閱讀(3818) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久噜噜噜久久中文字幕色伊伊| 国产欧美一区二区精品忘忧草| 一本大道av伊人久久综合| 蜜臀va亚洲va欧美va天堂| 久久天天躁狠狠躁夜夜爽蜜月| 久久久久久久一区二区三区| 久热国产精品视频| 亚洲大片在线| 亚洲精品影视| 午夜精品婷婷| 免费欧美日韩| 国产精品成人aaaaa网站| 国产乱码精品一区二区三区不卡| 黄色另类av| 一区二区三区高清在线| 欧美一区二区三区在线观看| 久久人人97超碰精品888| 亚洲精品1区| 午夜久久美女| 欧美精品一区二区久久婷婷| 国产精品影视天天线| 一区视频在线| 另类亚洲自拍| 亚洲砖区区免费| 久久亚洲捆绑美女| 国产精品免费一区二区三区在线观看 | 久久免费午夜影院| 欧美视频在线观看 亚洲欧| 国产一区二区高清| 亚洲天堂成人| 亚洲高清不卡av| 午夜在线a亚洲v天堂网2018| 欧美精品一区在线| 亚洲国产日韩在线| 久久久精品五月天| 亚洲素人一区二区| 欧美日韩你懂的| 亚洲精品免费一区二区三区| 久久精品国语| 亚洲一区二区三区视频播放| 欧美黄色视屏| 亚洲激情午夜| 欧美gay视频| 久久久成人网| 黄色成人片子| 久久久久久久尹人综合网亚洲| 一本色道久久综合| 欧美成人精品在线观看| 一区在线视频| 香蕉成人久久| 亚洲一区二区三区中文字幕 | 欧美成在线观看| 在线免费观看一区二区三区| 欧美在线观看网站| 亚洲一区二区免费视频| 欧美视频专区一二在线观看| 亚洲狼人精品一区二区三区| 欧美国产丝袜视频| 你懂的亚洲视频| 亚洲毛片在线| 亚洲日本欧美| 欧美日韩国产不卡| 亚洲午夜在线视频| 亚洲图片在线观看| 国产精品视频区| 欧美一区二视频| 香蕉久久夜色精品国产| 国产午夜精品久久久| 久久精品亚洲国产奇米99| 午夜精品久久久久影视| 国产日韩欧美综合在线| 久久福利电影| 玖玖国产精品视频| 欧美成人免费在线| 欧美日韩直播| 亚洲——在线| 亚洲午夜日本在线观看| 国产伦精品一区二区三区视频黑人| 亚洲自拍16p| 小黄鸭精品aⅴ导航网站入口| 国产日本欧美在线观看 | 亚洲区在线播放| 欧美性猛交xxxx乱大交蜜桃| 欧美在线观看天堂一区二区三区| 久久国产综合精品| 日韩视频在线观看国产| 国产精品99久久久久久久女警 | 欧美日韩第一区| 性高湖久久久久久久久| 久久免费视频观看| 亚洲视频碰碰| 久久精品中文字幕免费mv| 亚洲毛片av在线| 亚洲欧美视频在线观看视频| 亚洲第一区在线观看| 日韩图片一区| 精品动漫一区二区| 夜夜狂射影院欧美极品| 激情欧美一区二区三区在线观看| 亚洲欧洲日本国产| 国产一区二区三区av电影| 91久久精品日日躁夜夜躁国产| 国产精品一区视频网站| 亚洲国产天堂久久综合网| 国产伦精品一区二区三区照片91| 亚洲国产二区| 极品日韩久久| 亚洲欧美偷拍卡通变态| 亚洲视频你懂的| 欧美成人激情视频免费观看| 香蕉久久夜色精品国产| 欧美精品福利视频| 欧美插天视频在线播放| 国产色视频一区| 一区二区三区精品视频在线观看| 永久555www成人免费| 欧美一区1区三区3区公司| 亚洲一区免费| 欧美精品成人一区二区在线观看| 狂野欧美激情性xxxx| 国产欧美日本一区二区三区| 日韩午夜黄色| 一区二区福利| 欧美精品自拍| 亚洲人成在线观看一区二区| 在线看日韩av| 久久久蜜桃一区二区人| 久久精品亚洲精品| 国产一区二区三区久久| 亚洲一区二区在线观看视频| 亚洲一级影院| 国产精品久久久久aaaa樱花| 99国内精品久久久久久久软件| 亚洲国产一区在线观看| 欧美在线国产| 亚洲欧美中日韩| 欧美日韩在线播| 一区二区三区四区五区精品视频 | 极品av少妇一区二区| 欧美一级片在线播放| 久久精品一区中文字幕| 国产在线精品二区| 久久久欧美一区二区| 麻豆精品在线播放| 亚洲国产乱码最新视频| 欧美成人午夜剧场免费观看| 亚洲破处大片| 亚洲综合色网站| 国产日韩精品视频一区| 久久岛国电影| 欧美激情精品久久久久久大尺度 | 新狼窝色av性久久久久久| 国产欧美日韩精品一区| 欧美一区二区黄色| 欧美大片一区二区| 99riav1国产精品视频| 国产精品美女www爽爽爽视频| 亚洲男人的天堂在线aⅴ视频| 久久精品在线| 亚洲精品日韩在线观看| 国产精品电影观看| 久久久久国产一区二区三区| 亚洲国产欧美日韩| 亚洲一区视频| 在线观看亚洲视频啊啊啊啊| 欧美欧美午夜aⅴ在线观看| 亚洲一区二区三区免费观看| 久久夜色精品国产欧美乱极品| 亚洲精品免费在线播放| 国产精品大片免费观看| 久久久久久精| 亚洲午夜一区二区| 欧美~级网站不卡| 亚洲欧美国产高清| 亚洲国产aⅴ天堂久久| 国产精品嫩草99a| 欧美.www| 午夜亚洲福利在线老司机| 亚洲国产欧美国产综合一区| 久久精品国产99国产精品澳门| 亚洲精品在线三区| 国产综合久久久久久鬼色| 欧美日韩精品伦理作品在线免费观看 | 免播放器亚洲一区| 亚洲女ⅴideoshd黑人| 亚洲日本免费电影| 久久夜色精品国产欧美乱| 午夜精品久久久久久99热软件| 亚洲高清视频在线| 国产亚洲视频在线| 国产精品成人一区二区三区吃奶 | 一区二区在线视频播放| 国产精品久久久久高潮| 欧美大秀在线观看| 久久精品导航| 亚欧成人在线| 亚洲专区免费| 宅男噜噜噜66一区二区66| 亚洲精品久久嫩草网站秘色 | 国产婷婷色一区二区三区|