日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SSH2.0编程 ssh协议过程实现(转)

發布時間:2024/3/13 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SSH2.0编程 ssh协议过程实现(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

  SSh協議:

  全稱為Secure Shell,即很安全的shell,主要目的是用來取代傳統的telnet和r系列命令(rlogin,rsh,rexec等)遠程登錄和遠程執行命令的工具,實現遠程登錄和遠程執行命令加密,防止由于網絡監聽而出現的密碼泄露,從而對系統構成威脅。(telnet協議采用明文傳送密碼,數據傳送過程中也不加密)

  ssh協議目前有ssh1 和ssh2,其實現在我們主要使用的也是openssh。ssh不僅在登錄過程中對密碼進行加密傳送,而且在登錄后執行的命令的數據也進行加密,這樣即使別人在網絡上監聽并截獲了你的數據包,他也看不到其中的內容。

?

? 之前為了自己做一套SSH,先自己實現了一套telnet。但經過這么多天的苦逼,發現以前的工作都是徒勞。ssh的協議很繁雜,核心的內容在于密碼算法,而且自己很難在網上找到周全的細節講解與詳細的實現,只有靠自己刷RFC和問大神還有就是靠強X我的服務器艱難地完成。

??? 現計算了下時間,自己做SSH耗費了進兩個月的時間,雖然期間也夾著其他的繁雜事物,但自己在這方面確是是耗費了非常大的精力。因為這方面詳細資料的匱乏,自己以前也幾乎沒有接觸過密碼學方面的東西,很多只有靠自己摸索,所以我得經常拿我自己的服務器來做黑盒測試,我現在服務器上的ss服務器日志全是一些非法連接的記錄(—_—|||)。早知當初就不那么作死非要自己實現他的加密算法和過程,用openssl就很快搞定了。但我還是覺得這次做SSH的精力是我受益匪淺,不僅熟悉了各種加密,并且能靠自己實現并熟練應用了。可能這些對自己幫助不大,但至少和信安的小伙伴也有點吹牛的談資了~

??? 這篇文章希望能幫助到想了解ssh2.0協議或是親手實現ssh協議的小伙伴。

?

??? 首先對數據包的格式進行說明:

??? 數據包由包長度(Packet Length)、填充長讀(Padding Length)、信息代碼(Msg code)、信息內容與填充值(Padding String) 這5部分組成。信息內容中的一些字符串以4字節長度+該長度數量的字符組成,數值按照網絡序排列,例如:abc: 00 00 00 03 (char)a (char)b (char)c 。另外有一種大整數的情況,負數和字符串的表示方式一樣,正數需要前導0,例如 4b64: 00 00 00 03 00 4b 64 。

??? ssh頭的結構體:

1 2 3 4 5 6 7 struct sshhead { ??? unsigned int tlen; ??? unsigned char plen; ??? unsigned char msgcode; ??? sshhead(){tlen=6;} };

?

??? 就拿通過ssh遠程控制的一個完整個過程來講,ssh的過程可分為以下3部分:

??? 一、版本協商

??? 二、算法協商與密鑰交換

??? 三、加密通信(可能含有2、3部分)

??? 這其中第二部分是ssh最為核心的過程,該過程決定了以后通信所要使用的密鑰,下面按順序對每個部分對比著數據包進行詳細的講解并給出實現的過程。

???

??? 一、版本協商:

??? 在建立連接后,客戶端與服務器分別向對方發送自己ssh的版本信息(這里的數據格式不同于其他包,只有一行版本號),以\r\n結束。版本的格式如下:

???????????????????????? SSH-ssh協議版本-詳細版本\r\n (幾乎只有ssh協議版本之前的信息有效)

??? 比如我linux上的就是:SSH-2.0-OpenSSH_5.3\r\n

??? Putty的是:????????? SSH-2.0-PuTTY_Release_0.63\r\n

???

??? 一般來說,在建立連接后,是先由服務器發版本號過來,單線程處理版本協商的朋友需要注意下。

??? 在雙方收到對方發來的版本號后,會根據兩者之中最小的版本來進行接下來的通訊。

???

??? 二、算法協商與秘鑰交換:

??? 這部分的內容將會占該文章總篇幅的一半以上。

??? 首先給大家看下整個過程的數據包大概:

??? ??? 整個部分是從第6條開始到第15條結束,除去中間的非協議部分,總共有7條數據包。看起來只有這么幾條數據包,但其中包含了非常多的過程與隱秘的信息。

??? 1、算法協商:

??????? 位第6、9數據,分別為雙發向對法發送的自己在不同密碼需求上支持的算法。

???? 該數據包的格式:

??? 按順序分別是:

??????? cookie(隨機的值,16byte)

??????? kex_algorithms(秘鑰租交換算法)

??????? server_host_key_algorithms(服務器主機秘鑰,正常情況用處不大,甚至可以不用)

??????? encryption_algorithms_client_to_server(兩端通信使用的加密算法)

??????? encryption_algorithms_server_to_client

??????? mac_algorithms_client_to_server(數據校驗用的hash算法)

??????? mac_algorithms_server_to_client

??????? compression_algorithms_client_to_server(壓縮算法)

??????? compression_algorithms_server_to_client

??????? languages_client_to_server

??????? languages_server_to_client

??????? first_kex_packet_follows

??????? 0(4byte整數,擴展用的)

??? 每個算法類型可能會有多個不同的算法,這些算法之間使用逗號隔開。

??? 現在雙方知道對方支持的算法,但是應該怎樣決定每個類型實際所使用的算法呢?

??? 每個算法類型列表的第一個算法必須是首選的算法,服務器應以客戶端的算法優先級作為考慮,就拿交換算法舉例:

??????? 現在服務器有三個算法dh1,dh2,dh3

??????????? 客戶端有兩個算法dh3,dh2

??????? 那么服務器的首選算法是dh1,而客戶端是dh3,客戶端此時知道服務器有dh3算法,因此客戶端就確認使用dh3算法。服務器發現自己的首選算法與客戶端不同,而自己擁有客戶端的首選算法,因此服務器也確認使用dh3算法。

??????? 再看另一個情況

??????????? 服務器:dh1,dh2,dh3

??????????? 客戶端:dh4,dh3,dh1

??????? 這時服務器沒有客戶端的首選算法,客戶端會使用第二個算法dh3,此時服務器也支持第二個算法,雙方將確定使用dh3算法。

??? 如果服務器和客戶端雙方沒有共同的算法,這次會話將會終止。

??? 下面是代碼實現和服務器之間的版本協商

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #define KEI???? (char)20 #define NK????? (char)21 //算法名 #define VER "SSH-2.0-WCHRT_1.0\r\n" #define COOKIE "0123456789ABCDEF" #define VKEX "diffie-hellman-group-exchange-sha256" #define VSHK "ssh-rsa" #define VECS "aes128-cbc" #define VESC "aes128-cbc" #define VMCS "hmac-sha1" #define VMSC "hmac-sha1" #define VCCS "none" #define VCSC "none" #define VLCS "" #define VLSC "" #define KFPF ""
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 bool key_exchange() { ??? sshhead sshh; ??? sshh.msgcode=KEI; ??? sshh.tlen-=4; ??? //將算法列表與信息分別寫入緩沖區 ??? mstrin(COOKIE,sshh.tlen); ??? mstrin(VKEX,sshh.tlen); ??? mstrin(VSHK,sshh.tlen); ??? mstrin(VECS,sshh.tlen); ??? mstrin(VESC,sshh.tlen); ??? mstrin(VMCS,sshh.tlen); ??? mstrin(VMSC,sshh.tlen); ??? mstrin(VCCS,sshh.tlen); ??? mstrin(VCSC,sshh.tlen); ??? mstrin(VLCS,sshh.tlen); ??? mstrin(VLSC,sshh.tlen); ??? //ed ??? for ( int i=0;i<5;sshh.tlen++,i++) ??? { ??????? data[sshh.tlen]=( char )0; ??? } //載荷的計算與總長度的寫入都放在最后 ??? //count padding length ??? count_padding(sshh); ??? sshheadin(sshh); ??? //沒有封裝socket ??? len=send(sock,data,sshh.tlen+4,0); ??? mrecv(10); ??? //printf("(%d)",len); ??? if (data[5]==KEI) ??? { ??????? return true ; ??? } ??? return false ; }

用到的一些功能函數:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 //向緩沖區填充字符串,長度使用網絡字節序 void mstrin(string s,unsigned int &tlen) { ??? data[tlen]=( char )(s.length()/(256*256*256)); ??? data[tlen+1]=( char )(s.length()/(256*256)); ??? data[tlen+2]=( char )(s.length()/256); ??? data[tlen+3]=( char )(s.length()); ??? tlen+=4; ??? for ( int i=0;i<s.length();tlen++,i++) ??? { ??????? data[tlen]=s[i]; ??? } ??? data[tlen]= '\0' ; } void sshheadin(sshhead &sshh) { ??? sshh.tlen-=4; ??? data[0]=( char )(sshh.tlen/(256*256*256)); ??? data[1]=( char )(sshh.tlen/(256*256)); ??? data[2]=( char )(sshh.tlen/256); ??? data[3]=( char )(sshh.tlen); ??? data[4]=( char )sshh.plen; ??? data[5]=sshh.msgcode; } void count_padding(sshhead &sshh) { ??? int k=2; ??? if (sshh.tlen%8<4) ??? { ??????? k=1; ??? } ??? sshh.plen=(sshh.tlen/8+k)*8-sshh.tlen; ??? sshh.tlen=(sshh.tlen/8+k)*8; }

??? 2、秘鑰交換

??????? 在算法協商成功過后,雙方便立馬進行秘鑰組的交換。ssh2.0版本所使用的秘鑰組交換協議算法主要使用diffie-hellman-group-exchange-sha算法。

???????? 鑒于該部分內容特別多,我特意在另一篇單獨的文章中予以詳細介紹,再閱讀下文前請先參考該文章:dh-gex-sha算法詳解

??????? 我們數據包的第10到15條都是該部分的內容

???????

??? 1、dh key exchange init (C)

??????? 密鑰交換初始化,由客戶端先向服務器發送秘鑰交換請求的數據包,告知開始秘鑰交換。

???????

1 2 3 4 5 6 7 8 9 10 11 12 13 14 ??????? //<<<<<<<<<<DH KEX INIT<<<<<<<<< ??? sshh.tlen=6; ??? sshh.msgcode=DHKEI; ??? //payload ??? mintin(0x1000,sshh.tlen); ??? count_padding(sshh); ??? sshheadin(sshh); ??? len=send(sock,data,sshh.tlen+4,0); ??? ??? //dh: set I_C ??? dhdata.set_i_c(string(data+4,sshh.tlen)); ??? //dhdata.set_i_c(string(data,len)); ??? //>>>>>>>>>>>>>>>>>>>>>>>>

?

???? 2、dh key exchange reply? (S)

??????? 服務器收到客戶端發起交換的請求后,將自己用于dh算法的P、G發送給客戶端,用于客戶端生成dh公私鑰。這里的P是一個大素數,而G是大于1的數,G不必過大,10位以內最后,因為按冪運算G能輕易生成特別大的數。

???????

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ??????? //<<<<<<<<<<DH KEX REPLAY<<<<<<<<< ??? mrecv(10); ??? ??? if (data[5]!=DHKER) ??? { ??????? puts ( "DH KEX REPLAY error" ); ??????? return false ; ??? } ??? ??? //dh: set I_S ??? dhdata.set_i_s(string(data+4,len-4)); ??? //dhdata.set_i_s(string(data,len)); ??? //dh: read P ??? pos=6; ??? intlen=readstrint(data+pos); ??? pos+=4; ??? Integer p=readstrbigint(data+pos,intlen); ??? pos+=intlen; ??? //dh: read G ??? intlen=readstrint(data+pos); ??? pos+=4; ??? Integer g=readstrbigint(data+pos,intlen); ??? pos+=intlen; ??? //dh: set G and P ??? dhdata.set_g_and_p(g,p); ??? //cout<<dhdata.dh_p<<" "<<dhdata.dh_g<<endl; ??? //>>>>>>>>>>>>>>>>>>>>>>>>

?

?????? 3、dh gex init?? (C)

??????? 客戶端收到服務器發過來的P、G后,自己變成根據P、G生成并計算出自己的公鑰e。這一步也只需要客戶端將生成的e發送給服務器即可。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 //<<<<<<<<<<DH GEX INIT<<<<<<<<< ??? sshh.tlen=6; ??? sshh.msgcode=DHGI; ??? dhdata.comp_e(); ??? string e=inttostr(dhdata.get_e(),256); ??? mstrin(e,sshh.tlen); ??? count_padding(sshh); ??? sshheadin(sshh); ??? len=send(sock,data,sshh.tlen+4,0); //debugstr(data,len); ??? //>>>>>>>>>>>>>>>>>>>>>>>>

???????

?

??????? 4、dhgex reply?? (S)

??????? 重要的來了,服務器收到了客戶端發來的e后,便能計算出共享秘鑰K,并根據現有信息計算出生成所需秘鑰的H。

??????? 這個數據包里面含有如下信息:

??????? KEX DH host key(K_S):

??????????? 主機公鑰,一般為rsa公鑰。完整的格式為:總長度+算法名長度+算法名+證書(n)長度+證書(n)+公鑰長度+公鑰。

??????? DH server f :

??????????? 服務器的dh公鑰值,客戶端收到后便能用f計算出同樣的共享秘鑰K。

??????? KEX DH H signature (簽名后的H):

??????????? 服務器用主機私鑰對計算出的hash值H進行簽名的結果。格式為:總長度+算法名長度+算法名+簽名數據長度+簽名值。

??????????? H的計算方法: H=hash(V_C||V_S||I_C||I_S||K_S||e||f||K);

???????????? 按順序用到的值(注意類型):

???

類型說明
stringV_C客戶端的初始報文(版本信息:SSH-2.0-xxx,不含結尾的CR和LF)
stringV_S服務器的初始報文
stringI_C客戶端 SSH_MSG_KEX_INIT的有效載荷(不含開頭的數據長度值)
stringI_S服務器的同上
stringK_S主機秘鑰(dh gex reply(33)過程服務器發送host key (RSA公鑰))
mpinte客戶端DH公鑰
mpintf服務器DH公鑰
mpintK共同DH計算結果

???????

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 ??????? //<<<<<<<<<<DH GEX REPLAY<<<<<<<<< ??? mrecv(10); ??? if (data[5]!=DHGR) ??? { ??????? puts ( "DH GEX REPLAY error" ); ??????? system ( "pause" ); ??????? return false ; ??? } ??? int padlen=data[4]; ??? //dh: set server host key ??? pos=6; ??? intlen=readstrint(data+pos); //host key all length ??? dhdata.set_k_s(string(data+pos+4,intlen)); ??? pos+=4; ??? intlen=readstrint(data+pos); //host key name ??? pos+=4; ??? pos+=intlen; ??? intlen=readstrint(data+pos); //get rsa e and n ??? pos+=4; ??? Integer ee=readstrbigint(data+pos,intlen); ??? pos+=intlen; ??? intlen=readstrint(data+pos); ??? pos+=4; ??? Integer nn=readstrbigint(data+pos,intlen); //set rsa e and n ??? pos+=intlen; ??? dhdata.set_e_and_n(ee,nn); ??? //dh: set dh server f ??? intlen=readstrint(data+pos); ??? pos+=4; ??? dhdata.set_f(readstrbigint(data+pos,intlen)); ??? pos+=intlen; ??? //dh: set shka_name ??? pos+=4; //h's total length ??? intlen=readstrint(data+pos); ??? pos+=4; ??? dhdata.set_shka_name(string(data+pos,intlen)); ??? pos+=intlen; ??? //dh: set server h ??? intlen=readstrint(data+pos); ??? pos+=4; ??? dhdata.set_s_h(string(data+pos,intlen)); ??? pos+=intlen; ??? pos+=padlen; ??? //and other MAC// ??? dhdata.comp_k(); ??? dhdata.comp_h();

?

???????

?

???????? 5、new keys?? (C)

????????

????????? 客戶端收到服務器的信息后計算出K,并用同樣的方式計算出H(服務器和客戶端的H都是同一個值)。并使用服務器發過來的K_S驗證服務器發過來的簽名后的H,如果驗證一致,則說明此次秘鑰交換成功。客戶端向服務器發送new key,標志秘鑰交換過程的結束。如果此次秘鑰交換是整個會話的第一次交換,則計算出的H也是整個會話的會話ID(session_id)。

?

????? 秘鑰基本信息在網絡上的傳輸與交換,接下來就分別是服務器和客戶端各自使用現有信息計算出以后加解密所要使用的秘鑰。秘鑰計算:

??????????? 這里的加密秘鑰指的是以后數據通信所用的秘鑰,一般用aes算法。

??????????? 計算方式:hash(K,H,單個字符,session_id);

??????????? 單個字符指的是單個大寫的ASCII字母,根據不同的加密秘鑰選擇不同的字符來計算。

???

字母秘鑰
'A'客戶端到服務器的初始IV(CBC)
'B'服務器到客戶端的初始IV
'C'客戶端到服務器的加密秘鑰(對稱秘鑰)
'D'服務器到客戶端的加密秘鑰
'E'客戶端到服務器的完整性秘鑰(HMAC)
'F'服務器到客戶端的完整性秘鑰

???????????

?

??????? 就以aes-cbc為例子,aes對稱加解密所需要用到的值有初始IV與對稱秘鑰。這里的初始IV指的是cbc模式中加解密的初始向量,第二次加解密需要IV的值,以后的每次的加解密都要依賴于上一次加解密的數據。

?

???

??? 三、加密通信

?????? 此時雙方都擁有協商好的算法以及用于加解密的秘鑰,現在開始所有傳輸的全部數據都要進行加密(包含總長度),并使用同樣的。

??????? 在加密通信的過程中,雙方允許重新發送KEX秘鑰交換請求。這時整個秘鑰交換過程的數據將會使用現有密鑰加解密。在該次秘鑰交換的過程中也會生成一個H值,但該H值不會影響到此次會話的session_id,session_id只是會話第一次秘鑰交換生成的H值。在秘鑰交換最后客戶端發出new keys請求時。雙方會放棄當前使用的秘鑰,使用新協商的秘鑰繼續通信。

??????? 在遠程數據的通信過程中,雙方使用SSH_MSG_CHANNEL_DATA標志消息類型進行數據傳輸。

??????? 在秘鑰交換完成后第一次對發送數據加密時,首先需要對AES向量進行初始化,即設置對應的IV。aes部分我使用的是CRYPTOPP的aes-cbc算法(在后文的有對該算法的封裝)。

???

1 2 3 4 5 6 7 ??????? en_c_to_s.set_iv(dhdata.comp_encry_key(IVCSF,32)); ??? en_c_to_s.set_k(dhdata.comp_encry_key(ECSF,32)); ??? en_c_to_s.init(); ??? de_s_to_c.set_iv(dhdata.comp_encry_key(IVSCF,32)); ??? de_s_to_c.set_k(dhdata.comp_encry_key(ESCF,32)); ??? de_s_to_c.init();

???

??? 整個協議用到的主要加密算法的實現與封裝:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 //mycrypt.h #ifndef _MYCRYPT_H__ #define _MYCRYPT_H__ #include<cstring> #include<string> #include <iostream> #include<cmath> #include "integer.h" #include "files.h" #include "hex.h" #include "sha.h" #include "modes.h" #include "osrng.h" using namespace std; using namespace CryptoPP; Integer mkrandomnum( int len); string inttostr(Integer num,unsigned int radix); string inttostrnum(Integer num,unsigned int radix); //大整數轉mpint string inttompint(Integer num,unsigned int radix); string strtostrnum(string s); //大整數快速冪運算 Integer fastpower_comp(Integer a,Integer b,Integer c); //sha算法封裝 class m_sha { public : ??? string encode_sha1(string data); ??? string encode_sha256(string data); }; //dh算法實現 class m_dh { public : ??? Integer dh_g,dh_p,dh_x,dh_e; ??? Integer dh_y,dh_f; ??? Integer dh_k; ??? void set_g_and_p( const Integer g, const Integer p) ??? { ??????? dh_g=g; ??????? dh_p=p; ??? } ??? void set_y(Integer y) ??? { ??????? dh_y=y; ??? } ??? void set_f(Integer f) ??? { ??????? dh_f=f; ??? } ??? void comp_e(); ??? Integer get_e() ??? { ??????? return dh_e; ??? } ??? void comp_k(); ??? Integer get_k() ??? { ??????? return dh_k; ??? } }; //rsa算法實現 class m_rsa { public : ??? Integer rsa_e; ??? Integer rsa_n; ??? void set_e_and_n(Integer e,Integer n) ??? { ??????? rsa_e=e; ??????? rsa_n=n; ??? } ??? Integer comp_rsa_result(Integer num); }; //dh gex協議算法實現 class m_dh_gex_sha: public m_dh, public m_sha, public m_rsa { public : ??? string v_c,v_s; ??? string i_c,i_s; ??? string k_s; ??? string dh_h,s_h; ??? string shka_name; ??? void set_v_c(string x) ??? { ??????? v_c=x; ??? } ??? void set_v_s(string x) ??? { ??????? v_s=x; ??? } ??? void set_i_c(string x) ??? { ??????? i_c=x; ??? } ??? void set_i_s(string x) ??? { ??????? i_s=x; ??? } ??? void set_k_s(string x) ??? { ??????? k_s=x; ??? } ??? void set_s_h(string x) ??? { ??????? s_h=x; ??? } ??? void set_shka_name(string x) ??? { ??????? shka_name=x; ??? } ??? void comp_h(); ??? string get_h() ??? { ??????? return dh_h; ??? } ??? string comp_encry_key( char c, const int len); }; //aes-cbc算法封裝 class m_aes_cbc { public : ??? string aes_k; ??? string aes_iv; ??? void set_k(string x) ??? { ??????? aes_k=x; ??? } ??? void set_iv(string x) ??? { ??????? aes_iv=x; ??? } ??? CBC_Mode<AES>::Encryption *aes_Encryptor; ??? CBC_Mode<AES>::Decryption aes_Decryptor; ??? void init(); ??? string encode(string data); ??? string decode(string data); }; #endif //_MYCRYPT_H__
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 //mycrypt.cpp #include "mycrypt.h" Integer mkrandomnum( int len) { ??? Integer re=0; ??? for ( int i=0;i<len;i++) ??? { ??????? re*=10; ??????? re+= abs ( rand ())%10; ??? } ??? return re; } string inttostr(Integer num,unsigned int radix) { ??? string s1= "" ; ??? unsigned int k; ??? while (num>0) ??? { ??????? k=num%radix; ??????? num/=radix; ??????? //cout<<num<<" "; ??????? //printf("%d\n",k); ??????? s1+=( char )k; ??? } ??? string s2= "" ; ??? for ( int i=s1.length()-1;i>=0;i--) ??? { ??????? s2+=s1[i]; ??? } ??? return s2; } string inttostrnum(Integer num,unsigned int radix) { ??? string s1= "" ; ??? unsigned int k; ??? while (num>0) ??? { ??????? k=num%radix; ??????? num/=radix; ??????? if (k<10) ??????? { ??????????? s1+= '0' +k; ??????? } ??????? else ??????? { ??????????? s1+= 'a' +k-10; ??????? } ??? } ??? string s2= "" ; ??? for ( int i=s1.length()-1;i>=0;i--) ??? { ??????? s2+=s1[i]; ??? } ??? return s2; } string inttompint(Integer num,unsigned int radix) { ??? string s= "" ; ??? s+=( char )0; ??? s+=inttostr(num,radix); ??? int len=s.length(); ??? string k= "" ; ??? while (len>0) ??? { ??????? k+=( char )(len%256); ??????? len/=256; ??? } ??? while (k.length()<4) ??? { ??????? k+=( char )0; ??? } ??? string re; ??? re+=k[3]; ??? re+=k[2]; ??? re+=k[1]; ??? re+=k[0]; ??? re+=s; ??? return re; } string strtostrnum(string s) { ??? string re= "" ; ??? int k,p; ??? for ( int i=0;i<s.length();i++) ??? { ??????? p=s[i]; ??????? if (p<0) ??????? { ??????????? p=(256+s[i]); ??????? } ??????? k=p/16; ??????? for ( int j=0;j<2;j++) ??????? { ??????????? // ??????????? if (k<10) ??????????? { ??????????????? re+=( '0' +k); ??????????? } ??????????? else ??????????? { ??????????????? re+=( 'a' +k-10); ??????????? } ??????????? k=p%16; ??????? } ??? } ??? return re; } int intlength(Integer num) { ??? int re=0; ??? while (num>0) ??? { ??????? num/=10; ??????? re++; ??? } ??? return re; } Integer fastpower_comp(Integer a,Integer b,Integer c) { ??? ??? /*unused fast power ??? Integer re=1; ??? for(int i=0;i<b;i++) ??? { ??????? re*=a; ??????? re%=c; ??? } ??? return re; ??? */ ??? //fast power ??? Integer n=c; ??? c=1; ??? while (b!=0) ??? { ??????? if (b%2!=0) ??????? { ??????????? b=b-1; ??????????? c=(c*a)%n; ??????? } ??????? else ??????? { ??????????? b=b/2; ??????????? a=(a*a)%n; ??????? } ??? } ??? return c; } void m_dh::comp_e() { ??? ??? dh_x=mkrandomnum(50)+1; ??? dh_e=fastpower_comp(dh_g,dh_x,dh_p); ??? /* ??? cout<<"//"<<endl; ??? cout<<dh_g<<endl; ??? cout<<dh_x<<endl; ??? cout<<dh_p<<endl; ??? cout<<dh_e<<endl; ??? cout<<"//"<<endl; ??? */ } void m_dh::comp_k() { ??? dh_k=fastpower_comp(dh_f,dh_x,dh_p); } Integer m_rsa::comp_rsa_result(Integer num) { ??? return fastpower_comp(num,rsa_e,rsa_n); } void m_dh_gex_sha::comp_h() { ??? string data= "" ; ??? /* ??? data+=strtostrnum(v_c); ??? data+=strtostrnum(v_s); ??? data+=strtostrnum(i_c); ??? data+=strtostrnum(i_s); ??? data+=strtostrnum(k_s); ??? data+=inttostrnum(dh_e,16); ??? data+=inttostrnum(dh_f,16); ??? data+=inttostrnum(dh_k,16); ??? */??? ??? data+=v_c; ??? data+=v_s; ??? data+=i_c; ??? data+=i_s; ??? data+=k_s; ??? data+=inttompint(dh_e,16); ??? data+=inttompint(dh_f,16); ??? data+=inttompint(dh_k,16); ??? ??? //cout<<endl<<"|"<<data<<"||"<<endl; ??? dh_h=encode_sha256(data); } string m_dh_gex_sha::comp_encry_key( char c, const int len) { ??? string re; ??? string data= "" ; ??? data+=inttompint(dh_k,16); ??? data+=dh_h; ??? data+=c; ??? data+=dh_h; ??? re=encode_sha256(data); ??? while (re.length()<len) ??? { ??????? data=inttompint(dh_k,16); ??????? data+=dh_h; ??????? data+=re; ??????? re+=encode_sha256(data); ??? } ??? while (re.length()>len) ??? { ??????? re.pop_back(); ??? } ??? return re; } string m_sha::encode_sha1(string data) { ??? string hash; ??? SHA1 sha1; ??? HashFilter hash_filter (sha1); ??? hash_filter.Attach( new HexEncoder( new StringSink(hash), false )); ??? hash_filter.Put((byte *)data.c_str(),data.length()); ??? hash_filter.MessageEnd(); ??? return hash; } string m_sha::encode_sha256(string data) { ??? string hash; ??? SHA256 sha256; ??? HashFilter hash_filter (sha256); ??? hash_filter.Attach( new HexEncoder( new StringSink(hash), false )); ??? hash_filter.Put((byte *)data.c_str(),data.length()); ??? hash_filter.MessageEnd(); ??? return hash; } void m_aes_cbc::init() { ??? aes_Encryptor= new CBC_Mode<AES>::Encryption((unsigned char *)aes_k.c_str(), ??????? aes_k.length(), ??????? (unsigned char *)aes_iv.c_str()); ??? aes_Decryptor= new CBC_Mode<AES>::Decryption ((unsigned char *)aes_k.c_str(), ??????? aes_k.length(), ??????? (unsigned char *)aes_iv.c_str()); } string m_aes_cbc::encode(string data) { ??? string re; ??? StringSource(data, ??????? true , ??????? new StreamTransformationFilter(*aes_Encryptor, ??????? new StringSink(re), ??????? BlockPaddingSchemeDef::BlockPaddingScheme::ONE_AND_ZEROS_PADDING, ??????? true ) ??????? ); ??? return re; } string m_aes_cbc::decode(string data) { ??? string re; ??? StringSource(data, ??????? true , ??????? new StreamTransformationFilter(*aes_Decryptor, ??????? new StringSink(re), ??????? BlockPaddingSchemeDef::BlockPaddingScheme::ONE_AND_ZEROS_PADDING, ??????? true ) ??????? ); ??? return re; }

??? ssh的實現就到此終于結束了,截圖留念。

???

???

??? 筆者在之初就想使用crypto++來幫助實現ssh過程的密碼算法。而剛接觸這東西完全搞不懂怎么用,什么編碼器、生成器、過濾器、sink...這些概念根本就不懂,網上的使用文檔直接就拿這一堆概念加上一堆組合出來的代碼來實現一個加密算,沒有什么密碼學知識,想要快速掌握crypto++幾乎是不可能的,當時研究了很久就只是會使用它的hash加密。而后自己硬著頭皮實現了整個dh-gex,到后面aes后,發現自己能很自然得理解crypto++的用法了,便自己封裝了crypto++的aes算法供使用。

??? 總之都是好事,以后遇到其他的基于ssl的協議與應用就應能很輕松地理解與實現了。

http://www.cnblogs.com/wchrt/p/4550208.html

?

總結

以上是生活随笔為你收集整理的SSH2.0编程 ssh协议过程实现(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

伊甸园av在线 | 狠狠狠色丁香婷婷综合久久88 | 国产免费小视频 | 高清久久久久久 | 国产精品原创 | 国产精品久久久免费 | 深爱激情av | 欧美中文字幕第一页 | 久久婷婷久久 | av中文字幕不卡 | 五月天婷婷综合 | 久久 国产一区 | 在线激情影院一区 | 精品天堂av | 91精品视频在线免费观看 | 亚洲热久久 | 国产一区欧美日韩 | 免费在线激情视频 | 一区二区三区三区在线 | 夜夜操网| 夜夜操天天 | 久久综合亚洲鲁鲁五月久久 | 国产在线观看一 | www.夜夜操 | 国产精品久久久久久久久岛 | 欧洲成人av | 四虎影视成人精品国库在线观看 | 国产午夜在线观看视频 | 久久一区二区免费视频 | 欧美日韩免费在线观看视频 | 久久国产精品久久精品 | 日韩va亚洲va欧美va久久 | 欧美精品一区二区性色 | 国产精品毛片一区二区在线 | 国产看片网站 | 免费观看91 | 婷婷综合| 特级黄录像视频 | 在线观看免费版高清版 | 五月天激情综合网 | 中文字幕精品视频 | 成人午夜剧场在线观看 | 最新av在线免费观看 | 中文字幕在线看视频国产 | 日韩视频中文字幕在线观看 | www.天天操 | 亚洲精品在线观看中文字幕 | 色偷偷男人的天堂av | 国产免费二区 | 麻豆国产在线视频 | 亚洲视频一级 | av成年人电影 | 在线观看免费视频 | 99久久99久久| 亚州欧美精品 | 天天操人| 日韩欧美大片免费观看 | 中文国产字幕 | 91禁在线看 | 欧美日韩伦理一区 | av在线日韩 | www日日夜夜 | 国产伦理精品一区二区 | 亚洲无吗视频在线 | 91av在线免费| 99久e精品热线免费 99国产精品久久久久久久久久 | 国产精品999久久久 久产久精国产品 | 中文国产字幕 | 激情综合网在线观看 | 欧美色图p | 日韩欧美视频一区 | 婷婷丁香九月 | 视频91在线 | 日韩在线免费观看视频 | 一区二区av | 午夜视频播放 | 九九99视频 | 日韩精品一区二区在线视频 | 欧美成人视 | 麻豆一区二区三区视频 | 欧美日韩性 | 久久久免费高清视频 | 97视频人人澡人人爽 | 欧美日韩三级 | 久久最新网址 | 黄色软件在线看 | 国产精品三级视频 | 在线 国产一区 | 亚洲国产精品va在线看 | 日韩精品中文字幕在线观看 | 一二区精品 | 亚洲人视频在线 | 99久久综合狠狠综合久久 | 中文字幕日韩免费视频 | 国产一区麻豆 | 久久精品视频在线免费观看 | 日本午夜在线观看 | 91亚洲精品乱码久久久久久蜜桃 | 成人午夜精品久久久久久久3d | 视频在线在亚洲 | 天天色天天上天天操 | 在线国产小视频 | 在线中文字幕播放 | 97天天综合网 | 91国内在线 | 夜夜澡人模人人添人人看 | 成人在线免费看视频 | 国产精品久久久久aaaa九色 | 国产精品国内免费一区二区三区 | 狠狠色噜噜狠狠狠狠2021天天 | 狠狠色丁香婷婷综合久久片 | 欧美韩国日本在线观看 | 五月婷丁香 | 在线免费av网站 | 成av人电影| 丁香激情五月婷婷 | 一区二区在线电影 | 成人影片免费 | 91免费黄视频 | 免费国产在线视频 | 8x成人免费视频 | 国产亚洲精品中文字幕 | 美女国内精品自产拍在线播放 | 精品国产一区二 | 久久黄色网页 | 久久少妇 | 亚洲视频精选 | 久久蜜臀一区二区三区av | 国产精品黑丝在线观看 | 91精品资源 | 日韩在线高清 | 国产精品麻豆欧美日韩ww | 天天操夜夜摸 | 日韩av区 | 久久精品电影 | 日日爱夜夜爱 | 玖玖在线播放 | 国产日韩欧美在线观看 | 曰本三级在线 | av丝袜天堂 | 国产精品99久久久久久武松影视 | 亚洲区视频在线 | 一级c片| 久久精品99国产精品酒店日本 | 国产+日韩欧美 | 国产成人久久久久 | 五月婷婷开心 | 中文字幕一区二区三区在线视频 | 免费av高清| 中文字幕高清有码 | 五月天最新网址 | 96久久久| 日韩精品免费一区二区三区 | 片网址| 国产 日韩 在线 亚洲 字幕 中文 | 国产区在线视频 | 日韩精品aaa | 国产精品一区二区免费看 | 久久激情视频 久久 | 国产午夜三级一区二区三桃花影视 | 国产99久久久精品 | 激情五月播播久久久精品 | 久久999久久 | 91色影院 | 久久久免费播放 | 日韩视频三区 | 在线亚洲午夜片av大片 | 狠狠88综合久久久久综合网 | 亚洲精品一区二区三区在线观看 | 国产只有精品 | 丰满少妇高潮在线观看 | 天天射天天射天天射 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 午夜精品一区二区三区视频免费看 | 中文字幕永久在线 | 亚洲国产成人在线播放 | 毛片永久免费 | 免费观看国产精品 | 国产一二三四在线观看视频 | 91av大全| 香蕉视频导航 | 国产一区二区在线播放视频 | www.夜夜爱| 久久国产热 | 国产高清一级 | 久久久久亚洲精品成人网小说 | 99久久影院 | 久久久五月天 | 久久久免费精品 | 在线观看精品黄av片免费 | 免费看黄网站在线 | 夜夜爱av| 国产黄视频在线观看 | 日韩欧美电影在线观看 | 国产精品99精品久久免费 | 亚洲精品国产精品国自产在线 | 免费在线观看日韩欧美 | 久久久久久久久久久网 | 成人avav | 成人免费亚洲 | 国产精品免费高清 | 美女在线免费观看视频 | 99久久99久久精品免费 | 97视频亚洲| 丝袜制服天堂 | 香蕉在线播放 | 97视频资源 | 首页av在线 | 成人黄色av免费在线观看 | 色婷婷狠狠操 | 欧美一级免费黄色片 | 亚洲毛片一区二区三区 | 久久综合亚洲鲁鲁五月久久 | 久久综合毛片 | 国产精品乱码在线 | 丝袜美女视频网站 | 欧美片一区二区三区 | 欧美日韩视频在线观看免费 | 国产午夜一区二区 | 亚洲国产精品电影 | 青青草在久久免费久久免费 | 四虎精品成人免费网站 | 麻豆视频观看 | 99热亚洲精品 | 国产精品va在线观看入 | av大全在线看 | 亚洲日本国产 | 色干综合| 日日操夜 | 91色一区二区三区 | 一区二区三区动漫 | 黄色性av | 在线观看精品一区 | 天天射天天干天天插 | 久久免费看a级毛毛片 | 精品久久网 | 午夜精品中文字幕 | 波多野结衣在线观看视频 | 黄色片免费电影 | 日韩精品视频免费专区在线播放 | 亚洲观看黄色网 | 99久久精品免费看国产麻豆 | 天天干天天干天天操 | 国产成人三级在线 | 69精品在线 | 91最新在线观看 | 欧美性爽爽 | 在线 视频 一区二区 | 久草免费看 | 国产日韩亚洲 | 免费看三片| 韩日精品中文字幕 | 97国产大学生情侣酒店的特点 | www.久久色| 久久精品99国产国产 | 国产成人av一区二区三区在线观看 | 国产精品毛片一区二区 | 欧美日韩国产一区二区在线观看 | 丁香六月国产 | 91精品国自产在线观看欧美 | 精品自拍sae8—视频 | 在线韩国电影免费观影完整版 | 天天摸夜夜添 | 91精品国产91久久久久 | 国产精品视频免费看 | 黄色成品视频 | 天天摸天天操天天舔 | 亚洲dvd| 日黄网站 | 五月天丁香综合 | 久久人人精 | 国产精品一区二区果冻传媒 | 天天草综合| 91爱爱电影 | 国产成人99av超碰超爽 | 又色又爽又黄高潮的免费视频 | 欧美一级特黄aaaaaa大片在线观看 | 一区二区三区在线免费观看视频 | 97成人超碰 | 国产精品99精品久久免费 | 日本激情动作片免费看 | 欧美日韩色婷婷 | 免费看一及片 | 四虎在线视频免费观看 | 四虎4hu永久免费 | 婷婷伊人五月 | av中文在线| 国产破处视频在线播放 | 97超碰色偷偷 | 中文字幕在线看视频国产 | 成人av在线播放网站 | 人人狠狠综合久久亚洲婷 | 四虎www| 婷婷六月久久 | 色婷婷电影 | 午夜91视频| 日韩视频免费在线观看 | 黄免费在线观看 | 久久再线视频 | 国产亚洲永久域名 | 亚洲精品视频网 | av在线亚洲天堂 | 亚洲精品91天天久久人人 | 日韩中字在线 | 一本—道久久a久久精品蜜桃 | 日韩在线观看网站 | 中文字幕人成人 | 在线视频日韩一区 | 亚洲播播| 久久久久久久看片 | 亚洲精选在线观看 | 免费看污片 | 国产精品18久久久久久久久久久久 | 狠狠操天天干 | 久久久久久精 | 久久久国产精品网站 | 四虎在线观看 | 久久神马影院 | 国产精品女人久久久 | 亚洲精品乱码久久久久久蜜桃不爽 | 亚洲欧美婷婷六月色综合 | av黄色一级片 | 毛片的网址 | 四虎影院在线观看av | 日韩一区二区三 | 丰满少妇久久久 | 探花视频在线观看免费版 | 超碰97国产 | 丰满少妇对白在线偷拍 | 69av视频在线 | 欧美一区二视频在线免费观看 | 91在线免费观看网站 | 国产打女人屁股调教97 | 日产乱码一二三区别在线 | 国产精品18videosex性欧美 | 69国产成人综合久久精品欧美 | 美女精品 | 欧美视频在线观看免费网址 | 天天干天天操天天操 | 国产精品久久久久久久7电影 | 黄网站大全 | av天天干 | 激情电影影院 | 8x8x在线观看视频 | 制服丝袜在线 | 美女黄频网站 | 久久久久激情视频 | 国产亚洲欧洲 | 亚洲视频,欧洲视频 | 成年人免费在线 | 黄色毛片视频免费 | 日韩网站在线 | 深爱激情五月婷婷 | 国产精品久久久久久一区二区 | 中国一级片在线观看 | 欧美精品免费一区二区 | 人人爽影院 | 韩国三级在线一区 | 久久免费视频在线观看6 | 久久er99热精品一区二区 | 久久任你操 | 色噜噜狠狠狠狠色综合久不 | 日本黄色大片免费 | 国产成人av电影在线 | 欧美激情精品久久久久久变态 | 天天射天天色天天干 | 9在线观看免费 | 亚洲aaa毛片 | 欧美一级特黄高清视频 | 五月天婷婷丁香花 | 在线日韩精品视频 | 国产精品电影一区 | 91av视频在线免费观看 | 欧美日韩色婷婷 | 9久久精品 | 欧美一级乱黄 | 欧美日韩在线免费观看视频 | 精品久久一区二区三区 | 久久精品99久久久久久2456 | 99re国产 | 麻豆视频入口 | 久久久久免费精品 | 日韩在线观看三区 | 国产资源在线视频 | 天堂av官网| 免费成人在线视频网站 | 久久精品999 | 8090yy亚洲精品久久 | 夜夜骑首页 | 久久午夜国产精品 | 欧美福利视频一区 | 久久午夜电影院 | 日本aaa在线观看 | av中文字幕在线看 | 欧美国产不卡 | 国产又黄又爽无遮挡 | 亚洲一区二区麻豆 | 在线小视频国产 | 天天操天天操天天操 | 久草在线视频在线观看 | 天天摸夜夜添 | 麻豆一区在线观看 | 国产精品毛片一区二区 | 欧美另类xxxxx | 97精产国品一二三产区在线 | 波多野结衣一区二区 | 综合久久久久久久 | 免费国产ww | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 最近的中文字幕大全免费版 | 伊人久久在线观看 | 欧美 激情 国产 91 在线 | 国产a视频免费观看 | 四虎成人精品永久免费av | 狠狠色免费 | 毛片网在线观看 | 久久久亚洲网站 | 久久国产一区二区三区 | 草久中文字幕 | 一区av在线播放 | avav片| 国产精品久久久久久久久久ktv | 99热亚洲精品 | 天天干天天射天天插 | 九色最新网址 | 久久免费在线观看视频 | 国产精品99久久久精品 | 88av色 | 欧美精品久久久久久久久久丰满 | 丰满少妇在线 | 午夜久久久久久久久久影院 | av网址最新 | 日韩69av| www.黄色网.com | 国产精品入口麻豆 | 亚洲国产精品成人va在线观看 | 日本黄色a级大片 | 免费成人结看片 | 首页国产精品 | 99视频国产精品免费观看 | japanesefreesex中国少妇 | 丁香花在线视频观看免费 | a级黄色片视频 | 欧美a√在线 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 久久精品波多野结衣 | 96久久欧美麻豆网站 | 色网站在线免费观看 | 久久久久草 | 中文电影网| 日韩精品一区二区三区水蜜桃 | 色噜噜在线观看 | 免费在线观看黄色网 | 国产精品va视频 | 深夜福利视频一区二区 | 久久久久久久久久久久久久电影 | 在线精品在线 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 探花视频在线观看 | 精品一区二区亚洲 | 成人aaa毛片| 91福利在线观看 | 欧美日韩伦理在线 | 黄网站免费久久 | 欧美精品久久久久久久亚洲调教 | 麻豆视频免费入口 | 成人免费观看网站 | 日本激情视频中文字幕 | 四虎成人在线 | 国产黄在线免费观看 | 日本免费久久高清视频 | 欧美激情视频在线免费观看 | 久久成人国产精品入口 | 成片人卡1卡2卡3手机免费看 | 色丁香久久 | 深爱五月激情网 | 日日爱av | 亚洲最新毛片 | 97av在线| 中文字幕在线播放视频 | 国产在线国产 | 91亚洲夫妻 | 久久久国产精品视频 | 欧美日韩p片 | 色吊丝av中文字幕 | 亚洲精品动漫成人3d无尽在线 | 欧美久久99 | 久久久久久久网站 | 99热最新在线 | 三级黄色大片在线观看 | 五月婷婷婷婷婷 | 久草网站在线 | 久久国产精品99国产精 | 日日狠狠 | 一区二区国产精品 | 国产在线精品播放 | 精品一二三四视频 | 亚洲精品乱码久久久久久久久久 | 99高清视频有精品视频 | 精品国产一区二区三区av性色 | 99热在线观看 | 1000部国产精品成人观看 | 免费观看国产视频 | 91porny九色91啦中文 | 欧美淫视频| 天堂资源在线观看视频 | 黄色成年片 | av千婊在线免费观看 | 热久久免费视频精品 | 成人免费看电影 | 色噜噜在线观看视频 | 91精品视频播放 | 日日草夜夜操 | 日韩免费高清在线 | 国产亚洲激情视频在线 | 久久情侣偷拍 | 免费观看成人网 | 干狠狠| 日日综合网 | 国产又粗又猛又色 | 国产清纯在线 | 久久综合加勒比 | 欧美一区二区精美视频 | 成人午夜精品福利免费 | av午夜电影 | 久久亚洲福利视频 | 婷婷av在线 | 成人av在线网 | 国产资源在线观看 | 久久久久亚洲国产 | 嫩草av在线 | 日韩精品一区二区三区在线视频 | 中文字幕高清在线 | 日本公妇在线观看高清 | 亚洲精品18日本一区app | 日韩资源在线播放 | 欧美成人xxx | 99久久久久 | 婷婷精品视频 | 久久久久二区 | 亚洲第一成网站 | 日韩影片在线观看 | 国产v视频 | 久久av观看| 国产拍在线 | 久久久久久久久毛片精品 | 日韩一区二区免费播放 | 毛片一级免费一级 | 国内一级片在线观看 | 香蕉网站在线观看 | 欧美 国产 视频 | 午夜18视频在线观看 | 久综合网| 久操操 | 久久免费视频网站 | 久久99精品久久久久蜜臀 | 免费在线观看av不卡 | www.888.av| 国产97免费 | 日韩三级在线 | 国产精品久久久久aaaa九色 | 亚洲国产精品成人综合 | 日韩高清免费无专码区 | 黄色一级大片免费看 | 久久人人看 | 五月色丁香 | 午夜视频亚洲 | 在线观看久久 | 国产va在线观看免费 | 插综合网 | 日本久久久久久久久久 | 国产精品大片在线观看 | 操操日日 | 在线 你懂 | 五月婷婷影院 | av观看免费在线 | 国产一级二级在线 | 亚洲做受高潮欧美裸体 | 日批视频在线观看免费 | 欧美精品一区在线 | 亚洲精品综合欧美二区变态 | 精品国产一区二区三区日日嗨 | 色噜噜狠狠狠狠色综合 | 国产精品免费观看久久 | 深爱激情五月婷婷 | 天天摸天天操天天爽 | 成年人网站免费在线观看 | 久久久久久久久久网站 | 观看免费av| 日韩精品一区在线观看 | 美女天天操 | 色99视频 | 国产一级在线视频 | 国产香蕉av | 日韩欧美一区二区三区免费观看 | 日韩区视频 | 91精品国产入口 | 天天操天天操天天爽 | 97在线观看免费观看 | 久久久蜜桃一区二区 | 亚洲区另类春色综合小说 | 亚洲一区二区三区在线看 | 香蕉精品视频在线观看 | 九九99| 久艹视频在线免费观看 | 免费在线观看的av网站 | 国产精品第52页 | 五月天六月丁香 | 日韩女同av | 久久久久 免费视频 | 欧美性黄网官网 | 欧美国产日韩久久 | 婷婷在线网站 | 婷婷国产在线观看 | 国产精品不卡在线观看 | 日韩免费一区 | 久久亚洲私人国产精品 | 中文字幕在线日亚洲9 | 在线观看免费中文字幕 | 日日婷婷夜日日天干 | 久久免费美女视频 | 久久情侣偷拍 | 国产精品激情在线观看 | 亚洲乱码中文字幕综合 | 99精品欧美一区二区 | 日韩精品视 | 在线免费视 | 黄色软件在线观看视频 | 亚洲va韩国va欧美va精四季 | 六月丁香社区 | 人人揉人人揉人人揉人人揉97 | 国产精品久久久久毛片大屁完整版 | 婷婷久久综合网 | 精品国产乱码久久久久久1区二区 | 免费在线成人av | 香蕉视频18 | 久久成人一区 | 国产福利a | 亚洲午夜大片 | 福利区在线观看 | 久久av免费 | 91九色蝌蚪国产 | 中文字幕在线免费看 | www.夜夜骑.com | 日日日日| 天天干天天操天天入 | 国产伦理久久精品久久久久_ | 精品国产区在线 | 久久天天躁 | 91亚瑟视频 | 色爽网站 | 日韩黄色大片在线观看 | 天天操婷婷| 国产精品1区2区3区 久久免费视频7 | 免费av电影网站 | 操久久免费视频 | 亚洲午夜精品久久久久久久久 | 成人片在线播放 | 国产精品视频在线观看 | 丁香花在线视频观看免费 | 99在线观看 | 高清久久久 | 美女网站视频免费都是黄 | 91禁看片 | 欧美尹人| 国产精品h在线观看 | 欧美综合国产 | 亚洲在线国产 | 成人a视频片观看免费 | 黄色一区三区 | 婷婷干五月 | 免费男女羞羞的视频网站中文字幕 | 黄色一区二区在线观看 | 91在线播| 国产一区二区在线免费播放 | 欧美激情va永久在线播放 | 久久99国产一区二区三区 | 一区二区三区免费在线观看视频 | 九色最新网址 | 97偷拍视频 | 婷婷色在线播放 | 91精品一区二区三区久久久久久 | 久久一区91| 狠狠色噜噜狠狠狠狠 | 欧美日韩国产一区二区三区在线观看 | 在线视频观看你懂的 | 日韩免费福利 | 四虎国产精品免费 | 国产精品一级在线 | 亚洲视频2| 九九影视理伦片 | 欧美美女视频在线观看 | 国产又粗又猛又黄又爽的视频 | 精品在线观看一区二区三区 | 久久免费的视频 | 福利在线看片 | 三级黄色在线观看 | 美女在线免费观看视频 | 欧美日韩免费观看一区=区三区 | 999在线视频 | 国产色视频一区 | 国产原创中文在线 | 国内视频1区 | 日韩| 亚洲高清视频在线观看免费 | 51精品国自产在线 | h动漫中文字幕 | 黄色免费电影网站 | 国产精品毛片久久久久久久久久99999999 | 精品国产一区二区三区久久 | 中文字幕一区二区三区四区久久 | 九九九九热精品免费视频点播观看 | 成年人电影免费在线观看 | 99热官网| 日韩三级免费观看 | 中文字幕av在线不卡 | 久久香蕉电影 | 欧美一区在线观看视频 | 日韩欧美69 | 激情文学丁香 | 日本婷婷色 | 中文字幕丝袜一区二区 | aav在线| 国产日产精品一区二区三区四区的观看方式 | 81精品国产乱码久久久久久 | 在线观看视频你懂的 | 午夜性生活 | 精品在线亚洲视频 | 久久成人在线视频 | 在线观看91精品视频 | 国产一级免费观看 | 国产精品99爱 | 在线视频一区二区 | 波多野结衣精品视频 | 欧美不卡在线 | 黄色网址a | 免费av视屏 | 一区二区伦理电影 | 视频 天天草 | 美女久久久久 | 日本视频久久久 | 69精品在线| 黄网站色 | 国产精品一区二区无线 | 免费一级片视频 | 久久久久这里只有精品 | 91九色最新| 日本电影久久 | 日韩美视频 | 最近日本字幕mv免费观看在线 | 午夜精品视频福利 | 黄色成人影视 | 婷婷丁香六月天 | 在线日韩中文 | 亚洲欧洲一区二区在线观看 | 国产黄网站在线观看 | 久久草av| 国产高清一级 | 国产精品久久久久毛片大屁完整版 | 亚洲免费视频在线观看 | 中文一区在线观看 | 日韩精品一区二区三区丰满 | 色婷婷综合久久久中文字幕 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 热99久久精品| 99热这里只有精品国产首页 | 免费在线观看一区二区三区 | 国产精品岛国久久久久久久久红粉 | 久草五月 | av3级在线| 91爱爱电影 | 青青草国产精品视频 | 91精品伦理 | 日韩一区二区三区免费电影 | 97超碰资源| 久久久福利| 丁香九月激情综合 | 亚洲japanese制服美女 | 激情六月婷婷久久 | 四虎永久免费在线观看 | 亚洲天天摸日日摸天天欢 | 中文字幕黄色网址 | 日韩免费网址 | 精品一区二区在线免费观看 | 天天色天天射天天操 | 久草线| 91九色视频在线播放 | 亚洲免费av片 | 国产又粗又猛又爽又黄的视频先 | 成年人免费在线 | 国产精品美女久久久久久 | 欧美日韩免费网站 | 91久久一区二区 | 亚洲高清av在线 | 欧美性高跟鞋xxxxhd | 久久成人一区 | 日韩一区二区三区免费电影 | 欧美精品久久久久久久亚洲调教 | 毛片网站在线观看 | 成人黄色国产 | 999视频网| 在线黄色国产 | 最近中文字幕国语免费av | 日韩女同一区二区三区在线观看 | 精品国产诱惑 | 国产精品女人网站 | 日韩国产精品一区 | 97电影在线看视频 | 91精品麻豆 | 成人啪啪18免费游戏链接 | 色视频在线免费 | 亚洲三级精品 | 国产精品美女免费看 | 国产在线不卡视频 | 久久一线| 天天舔天天搞 | 中文字幕免费在线 | 欧美日韩国产一区二区在线观看 | 超碰97在线人人 | 毛片网站免费在线观看 | a级国产乱理论片在线观看 特级毛片在线观看 | 欧美在线观看禁18 | 国产 视频 高清 免费 | 天天干,天天操 | 亚洲精品乱码久久久久久蜜桃不爽 | 午夜国产一区 | 色婷婷天天干 | 亚洲狠狠婷婷综合久久久 | 日本久久中文 | 91九色蝌蚪国产 | 99精品欧美一区二区蜜桃免费 | 精品产品国产在线不卡 | 免费观看国产成人 | 日韩精品中文字幕在线观看 | 天天爽人人爽夜夜爽 | 人人干人人艹 | www黄色com | 中文字幕日韩在线播放 | 亚洲最大免费成人网 | 日韩久久精品一区二区 | 欧美另类xxx | 91麻豆精品国产91久久久使用方法 | 亚洲欧洲精品在线 | 久草视频免费播放 | 91精品国产高清 | 九九九九九精品 | 8x成人在线 | 午夜色站 | 香蕉视频网站在线观看 | 日韩 精品 一区 国产 麻豆 | 99久久综合国产精品二区 | 亚洲午夜精品久久久久久久久久久久 | 91热这里只有精品 | 久久这里只有精品1 | 天天色棕合合合合合合 | 国产精品中文在线 | 一本一道久久a久久综合蜜桃 | 最近在线中文字幕 | 日日干干夜夜 | 午夜在线观看影院 | 天天干天天操天天拍 | 中文字幕高清av | 国产永久网站 | 精品高清美女精品国产区 | 91精品国产91久久久久福利 | 成人h视频 | 男女激情免费网站 | 午夜美女福利直播 | 国内久久 | 久久国产精品免费看 | 国产美女精品久久久 | 亚洲精品乱码久久久久久蜜桃欧美 | 免费看片网址 | 国产一区二区免费看 | 久草精品视频在线播放 | 伊人色综合久久天天网 | 2019av在线视频 | 日本性生活一级片 | 国产精品电影一区 | 亚洲久在线 | 国产精品自拍在线 | 日本久久综合视频 | 日韩精品三区四区 | 欧美一二三区在线观看 | 最新超碰在线 | 中文字幕欧美日韩va免费视频 | 久草精品在线播放 | 国产精品久久 | 亚洲 欧美变态 另类 综合 | 久久精品一区二区三区中文字幕 | 最近日韩中文字幕中文 | 天天爱天天射 | 91在线精品视频 | 久草免费在线视频观看 | 中文字幕在线观看免费观看 | 国产精品自产拍在线观看蜜 | 99视频导航| 中文字幕第一页在线视频 | 91片黄在线观 | 国产一二三精品 | 亚洲国产播放 | 国产精品福利在线 | 精品国产aⅴ麻豆 | 亚洲综合干 | 亚洲午夜精品久久久久久久久久久久 | 7777xxxx | 中文免费观看 | 五月婷婷六月综合 | 成人黄色视 | 激情九九| 草久久久久久 | 久久久久久久18 | 天天爱天天操 | 亚洲精品视频一二三 | 99这里只有久久精品视频 | av丝袜在线 | 99久久日韩精品免费热麻豆美女 | 免费黄色特级片 | 成人在线免费看 | 亚洲精品免费在线播放 | 色中射| 欧美另类69 | 国产精品久久久久永久免费看 | 亚洲欧美日韩国产一区二区 | 欧美日韩中文另类 | 日韩中文幕 | 国产欧美日韩精品一区二区免费 | 五月婷婷狠狠 | 国产精品久久久久久久久毛片 | 天天干天天干天天干天天干天天干天天干 | 日韩精品视 | 97人人模人人爽人人喊网 | 中文字幕在线观看的网站 | 久久久久久高清 | 免费麻豆 | 欧美激情综合五月色丁香小说 | 亚洲激情 在线 | 国产香蕉视频 | 97碰碰碰| 亚洲精品视频在线 | 狠狠操狠狠干天天操 | 手机成人av | 91新人在线观看 | 在线亚洲成人 | 亚洲极色| 日韩激情在线视频 | 久草在线视频网站 | 国内外成人免费在线视频 | 午夜av网站 | 91精品久久久久久 | 岛国精品一区二区 | 亚洲三级视频 | 亚洲激情综合网 | 久久综合久久综合久久综合 | 成人理论在线观看 | 久草视频2 | 波多野结衣资源 | 久久8精品 | 国产日韩欧美自拍 | 一区三区视频 | 中日韩三级视频 | 久久久久久久久精 | 深夜免费福利网站 | 免费视频资源 | 亚洲精品88欧美一区二区 | 国产一区在线免费观看视频 | 国产精品99久久久久人中文网介绍 | 午夜久久影视 | 亚洲一区久久 | 久在线 | 国产精品久久久久999 | 精品人人人 | www.色com| 亚洲精品午夜久久久久久久 | 国产二区视频在线观看 | 五月天网站在线 | www.xxx.性狂虐 | 色综合久久久久久久久五月 | 天天做天天爱天天爽综合网 | 超碰伊人网 | 精品国内自产拍在线观看视频 | 天天综合人人 | 激情自拍av | 亚洲国产精彩中文乱码av | 国产一区二区三区四区大秀 | 免费看av在线 | 干干夜夜 | 人人玩人人添人人澡超碰 | 波多野结衣电影一区二区三区 | 国产精品成人a免费观看 | 国产精品午夜久久久久久99热 | 色午夜影院| 超碰97中文 | 欧美激情视频一二区 | 久久深爱网| 国产精品久久久久久久久毛片 | 色综合天天综合 | 国产在线精品一区二区 |