鍦ㄥ仛DX緙栫▼鏃墮」鐩腑浼氶亣鍒頒笂闈㈢殑閿欒
瑙e喅鍔炴硶錛?/p>
#include <tchar.h>
#define _STRSAFE_H_INCLUDED_
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#define _WIN32_WINNT 0x0501
鍗硉char.h澶村0鏄庝竴瀹氳緗墠 瀵逛簬楂樼増鏈殑緙栬瘧鍣ㄨ璁劇疆WINNT澶т簬鎴栫瓑浜?01鑰岄潪400
甯屾湜瀵瑰ぇ瀹舵湁甯姪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 寮鏀炬簮浠g爜錛岃繖瀵瑰涔犮佸垎鏋?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 涓嬪鏋滆鐢ㄥ姞瀵嗙畻娉曠殑姹囩紪浠g爜瀹炵幇錛岃繕闇瑕?masm 鎴?nasm 姹囩紪鍣ㄣ?( 姹囩紪浠g爜鍙互姣?C 浠g爜鏄捐憲鎻愰珮瀵嗙爜榪愮畻閫熷害 )
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 瀵嗛挜銆佸姞瑙e瘑鏂囦歡錛岀敋鑷沖彲浠ョ敤鏉ョ淮鎶や竴涓祴璇曠敤鐨?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
瑙e瘑鏂囦歡錛?>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 涓敮鎸佷紬澶氱殑瀵嗙爜綆楁硶錛屽茍鎻愪緵浜嗗緢濂界殑灝佽鍜屾帴鍙c傚瘑鐮佺畻娉曚富瑕佸垎涓哄涓嬪嚑綾伙細瀵圭О綆楁硶銆佸叕閽ョ畻娉曘佹暎鍒楃畻娉曘侀殢鏈烘暟浜х敓綆楁硶絳夈?
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 鐨勫嚱鏁板悕鍜屽弬鏁版帴鍙e拰 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 鐪嬩綔寮傛垨錛屽洜姝ゅ姞瀵嗕袱嬈″嵆瑙e瘑銆?
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 鍔犲瘑瑙e瘑
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 絳懼悕鏄妸琚緗叉秷鎭殑鏁e垪鍊肩紪鐮佸悗鐢ㄧ閽ュ姞瀵嗭紝鍥犳鍑芥暟涓弬鏁?type 鐢ㄦ潵鎸囩ず鏁e垪鍑芥暟鐨勭被鍨嬶紝涓鑸槸 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 綆楁硶閲嶅鎺ユ敹鐢ㄦ埛杈撳叆錛岀洿鍒版渶鍚庝竴嬈$粨鏉熸椂杈撳嚭鏁e垪緇撴灉銆?
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 璇佷功瑙f瀽
6.4 瑙f瀽紺轟緥紼嬪簭
鍙傝 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
SSLeay
http://www2.psy.uq.edu.au/~ftp/Crypto/
OpenSSL 涓枃璁哄潧
Perl
http://www.cpan.org/src/README.html
http://www.activestate.com/Products/ActivePerl/
NASM
聽
鈥⒙?聽
聽
鈥⒙?紺轟緥紼嬪簭
娉?: 姝ゅ祵鍏ョ殑鏂囦歡瀵硅薄鍙互琚嫋鏀懼埌紓佺洏鐩綍涓幓銆?
鈥⒙?DES 紺轟緥紼嬪簭
鈥⒙?AES 紺轟緥紼嬪簭
鈥⒙?RC4 紺轟緥紼嬪簭
錛?1 錛夛紟 錛?2 錛夛紟 錛?3 錛?
鈥⒙?RSA 紺轟緥紼嬪簭
錛?1 錛夛紟 錛?2 錛夛紟
鈥⒙?Hash 綆楁硶紺轟緥紼嬪簭
鈥⒙?SSL 紺轟緥紼嬪簭
鈥⒙?CA 閰嶇疆紺轟緥鍜岃瘉涔﹁В鏋愮ず渚嬬▼搴?
(1). (2).
鈥⒙?聽
鈥⒙?聽
寮曡嚜錛歨ttp://www.cnblogs.com/ahuo/archive/2008/07/30/1256820.html