亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C/C++ MD5算法的實現代碼

2020-01-26 14:00:24
字體:
來源:轉載
供稿:網友

在逆向程序的時候,經常會碰到加密的算法的問題,前面分析UC的逆向工程師的面試題2的時候,發現使用了MD5的加密算法(MD5算法是自己實現的,不是使用的算法庫函數)。尤其是在逆向分析網絡協議的時候,一般的程序使用的加密算法都是使用的庫函數提供的算法,有些程序使用的算法是自己實現的;相對來說使用函數庫提供的加密函數的算法相對來說比較好識別,因為有算法常見函數在;但是如果不是使用的函數庫提供的加密的函數而是自己去實現某些算法話,識別起來有一定的難度,這就需要你對函數的加密原理以及流程還算法的特征比較熟悉才能很快識別出來。下面就將網上有關MD5算法一些知識整理一下,方面自己查閱。

md5簡介

消息摘要算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前計算機領域用于確保信息傳輸完整一致而廣泛使用的散列算法之一(又譯哈希算法、摘要算法等),主流編程語言普遍已有MD5的實現。將數據 (如一段文字)運算變為另一固定長度值,是散列算法的基礎原理,MD5的前身有MD2、MD3和MD4。MD5由MD4、MD3、MD2改進而來,主要增強算法復雜度和不可逆性。目前,MD5算法因其普遍、穩定、快速的特點,仍廣泛應用于普通 數據的錯誤檢查領域。例如在一些BitTorrent下載中,軟件將通過計算MD5檢驗下載到的文件片段的完整性。MD5已經廣泛使用在為文件傳輸提供一定的可靠性方面。例如,服務器預先提供一個MD5校驗和,用戶下載完文件以后, 用MD5算法計算下載文件的MD5校驗和,然后通過檢查這兩個校驗和是否一致,就能判斷下載的文件是否出錯。MD5是輸入不定長度信息,輸出固定長度128-bits的算法。經過程序流程,生成四個32位數據,最后聯合起來成為一個 128-bits散列?;痉绞綖?,求余、取余、調整長度、與鏈接變量進行循環運算。得出結果。

md5算法描述

假設輸入信息(input message)的長度為b(bit),我們想要產生它的報文摘要,在此處b為任意的非負整數:b也可能為0,也不一定為8的整數倍,且可能是任意大的長度。設該信息的比特流表示如下: M[0] M[1] M[2] ... M[b-1] 計算此信息的報文摘要需要如下5步:

1.補位

信息計算前先要進行位補位,設補位后信息的長度為LEN(bit),則LEN%512 = 448(bit),即數據擴展至 K * 512 + 448(bit)。即K * 64+56(byte),K為整數。補位操作始終要執行,即使補位前信息的長度對512求余的結果是448。具體補位操作:補一個1,然后補0至滿足上述要求。總共最少要補1bit,最多補512bit。

2.尾部加上信息長度

將輸入信息的原始長度b(bit)表示成一個64-bit的數字,把它添加到上一步的結果后面(在32位的機器上,這64位將用2個字來表示并且低位在前)。當遇到b大于2^64這種極少的情況時,b的高位被截去,僅使用b的低64位。經過上面兩步,數據就被填補成長度為512(bit)的倍數。也就是說,此時的數據長度是16個字(32byte)的整數倍。此時的數據表示為: M[0 ... N-1] 其中的N是16的倍數。

3.初始化緩存區

用一個四個字的緩沖器(A,B,C,D)來計算報文摘要,A,B,C,D分別是32位的寄存器,初始化使用的是十六進制表示的數字,注意低字節在前: word A: 01 23 45 67 word B: 89 ab cd ef word C: fe dc ba 98 word D: 76 54 32 10

4.轉換

首先定義4個輔助函數,每個函數的輸入是三個32位的字,輸出是一個32位的字: F(X,Y,Z) = XY v not(X) Z G(X,Y,Z) = XZ v Y not(Z) H(X,Y,Z) = X xor Y xor Z I(X,Y,Z) = Y xor (X v not(Z))

FF(a,b,c,d,Mj,s,ti)表示 a = b + ((a + F(b,c,d) + Mj + ti) << s)GG(a,b,c,d,Mj,s,ti)表示 a = b + ((a + G(b,c,d) + Mj + ti) << s)HH(a,b,c,d,Mj,s,ti)表示 a = b + ((a + H(b,c,d) + Mj + ti) << s)Ⅱ(a,b,c,d,Mj,s,ti)表示 a = b + ((a + I(b,c,d) + Mj + ti) << s)

這四輪(64步)是:

第一輪

FF(a,b,c,d,M0,7,0xd76aa478) FF(d,a,b,c,M1,12,0xe8c7b756) FF(c,d,a,b,M2,17,0x242070db) FF(b,c,d,a,M3,22,0xc1bdceee) FF(a,b,c,d,M4,7,0xf57c0faf) FF(d,a,b,c,M5,12,0x4787c62a) FF(c,d,a,b,M6,17,0xa8304613) FF(b,c,d,a,M7,22,0xfd469501) FF(a,b,c,d,M8,7,0x698098d8) FF(d,a,b,c,M9,12,0x8b44f7af) FF(c,d,a,b,M10,17,0xffff5bb1) FF(b,c,d,a,M11,22,0x895cd7be) FF(a,b,c,d,M12,7,0x6b901122) FF(d,a,b,c,M13,12,0xfd987193) FF(c,d,a,b,M14,17,0xa679438e) FF(b,c,d,a,M15,22,0x49b40821)

第二輪

GG(a,b,c,d,M1,5,0xf61e2562) GG(d,a,b,c,M6,9,0xc040b340) GG(c,d,a,b,M11,14,0x265e5a51) GG(b,c,d,a,M0,20,0xe9b6c7aa) GG(a,b,c,d,M5,5,0xd62f105d) GG(d,a,b,c,M10,9,0x02441453) GG(c,d,a,b,M15,14,0xd8a1e681) GG(b,c,d,a,M4,20,0xe7d3fbc8) GG(a,b,c,d,M9,5,0x21e1cde6) GG(d,a,b,c,M14,9,0xc33707d6) GG(c,d,a,b,M3,14,0xf4d50d87) GG(b,c,d,a,M8,20,0x455a14ed) GG(a,b,c,d,M13,5,0xa9e3e905) GG(d,a,b,c,M2,9,0xfcefa3f8) GG(c,d,a,b,M7,14,0x676f02d9) GG(b,c,d,a,M12,20,0x8d2a4c8a)

第三輪

HH(a,b,c,d,M5,4,0xfffa3942) HH(d,a,b,c,M8,11,0x8771f681) HH(c,d,a,b,M11,16,0x6d9d6122) HH(b,c,d,a,M14,23,0xfde5380c) HH(a,b,c,d,M1,4,0xa4beea44) HH(d,a,b,c,M4,11,0x4bdecfa9) HH(c,d,a,b,M7,16,0xf6bb4b60) HH(b,c,d,a,M10,23,0xbebfbc70) HH(a,b,c,d,M13,4,0x289b7ec6) HH(d,a,b,c,M0,11,0xeaa127fa) HH(c,d,a,b,M3,16,0xd4ef3085) HH(b,c,d,a,M6,23,0x04881d05) HH(a,b,c,d,M9,4,0xd9d4d039) HH(d,a,b,c,M12,11,0xe6db99e5) HH(c,d,a,b,M15,16,0x1fa27cf8) HH(b,c,d,a,M2,23,0xc4ac5665)

第四輪

Ⅱ(a,b,c,d,M0,6,0xf4292244) Ⅱ(d,a,b,c,M7,10,0x432aff97) Ⅱ(c,d,a,b,M14,15,0xab9423a7) Ⅱ(b,c,d,a,M5,21,0xfc93a039) Ⅱ(a,b,c,d,M12,6,0x655b59c3) Ⅱ(d,a,b,c,M3,10,0x8f0ccc92) Ⅱ(c,d,a,b,M10,15,0xffeff47d) Ⅱ(b,c,d,a,M1,21,0x85845dd1) Ⅱ(a,b,c,d,M8,6,0x6fa87e4f) Ⅱ(d,a,b,c,M15,10,0xfe2ce6e0) Ⅱ(c,d,a,b,M6,15,0xa3014314) Ⅱ(b,c,d,a,M13,21,0x4e0811a1) Ⅱ(a,b,c,d,M4,6,0xf7537e82) Ⅱ(d,a,b,c,M11,10,0xbd3af235) Ⅱ(c,d,a,b,M2,15,0x2ad7d2bb) Ⅱ(b,c,d,a,M9,21,0xeb86d391)

下面是MD5算法的具體的實現

MD5算法的頭文件Md5.h:

#ifndef MD5_H  #define MD5_H   typedef struct {   unsigned int count[2];   unsigned int state[4];   unsigned char buffer[64]; }MD5_CTX;   #define F(x,y,z) ((x & y) | (~x & z))  #define G(x,y,z) ((x & z) | (y & ~z))  #define H(x,y,z) (x^y^z)  #define I(x,y,z) (y ^ (x | ~z))  #define ROTATE_LEFT(x,n) ((x << n) | (x >> (32-n)))   #define FF(a,b,c,d,x,s,ac) { / a += F(b, c, d) + x + ac; / a = ROTATE_LEFT(a, s); / a += b; / }  #define GG(a,b,c,d,x,s,ac) { /   a += G(b, c, d) + x + ac; /   a = ROTATE_LEFT(a, s); /   a += b; / }  #define HH(a,b,c,d,x,s,ac) { /   a += H(b, c, d) + x + ac; /   a = ROTATE_LEFT(a, s); /   a += b; / } #define II(a,b,c,d,x,s,ac) { /   a += I(b, c, d) + x + ac; /   a = ROTATE_LEFT(a, s); /   a += b; / }   void MD5Init(MD5_CTX *context); void MD5Update(MD5_CTX *context, unsigned char *input, unsigned int inputlen); void MD5Final(MD5_CTX *context, unsigned char digest[16]); void MD5Transform(unsigned int state[4], unsigned char block[64]); void MD5Encode(unsigned char *output, unsigned int *input, unsigned int len); void MD5Decode(unsigned int *output, unsigned char *input, unsigned int len);  #endif

MD5算法的實現文件Md5.cpp:

unsigned char PADDING[] = {    0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };  //在逆向代碼的時候,需要關注下面的特征值 void MD5Init(MD5_CTX *context) {   context->count[0] = 0;   context->count[1] = 0;   context->state[0] = 0x67452301;   context->state[1] = 0xEFCDAB89;   context->state[2] = 0x98BADCFE;   context->state[3] = 0x10325476; }  void MD5Update(MD5_CTX *context, unsigned char *input, unsigned int inputlen) {   unsigned int i = 0, index = 0, partlen = 0;   index = (context->count[0] >> 3) & 0x3F;   partlen = 64 - index;   context->count[0] += inputlen << 3;   if (context->count[0] < (inputlen << 3))     context->count[1]++;   context->count[1] += inputlen >> 29;    if (inputlen >= partlen)   {     memcpy(&context->buffer[index], input, partlen);     MD5Transform(context->state, context->buffer);     for (i = partlen; i + 64 <= inputlen; i += 64)       MD5Transform(context->state, &input[i]);     index = 0;   }   else   {     i = 0;   }   memcpy(&context->buffer[index], &input[i], inputlen - i); }  void MD5Final(MD5_CTX *context, unsigned char digest[16]) {   unsigned int index = 0, padlen = 0;   unsigned char bits[8];   index = (context->count[0] >> 3) & 0x3F;   padlen = (index < 56) ? (56 - index) : (120 - index);   MD5Encode(bits, context->count, 8);   MD5Update(context, PADDING, padlen);   MD5Update(context, bits, 8);   MD5Encode(digest, context->state, 16); }  void MD5Encode(unsigned char *output, unsigned int *input, unsigned int len) {   unsigned int i = 0, j = 0;   while (j < len)   {     output[j] = input[i] & 0xFF;     output[j + 1] = (input[i] >> 8) & 0xFF;     output[j + 2] = (input[i] >> 16) & 0xFF;     output[j + 3] = (input[i] >> 24) & 0xFF;     i++;     j += 4;   } }  void MD5Decode(unsigned int *output, unsigned char *input, unsigned int len) {   unsigned int i = 0, j = 0;   while (j < len)   {     output[i] = (input[j]) |       (input[j + 1] << 8) |       (input[j + 2] << 16) |       (input[j + 3] << 24);     i++;     j += 4;   } }  void MD5Transform(unsigned int state[4], unsigned char block[64]) {   unsigned int a = state[0];   unsigned int b = state[1];   unsigned int c = state[2];   unsigned int d = state[3];   unsigned int x[64];    MD5Decode(x, block, 64);   FF(a, b, c, d, x[0], 7, 0xd76aa478);   FF(d, a, b, c, x[1], 12, 0xe8c7b756);   FF(c, d, a, b, x[2], 17, 0x242070db);   FF(b, c, d, a, x[3], 22, 0xc1bdceee);   FF(a, b, c, d, x[4], 7, 0xf57c0faf);   FF(d, a, b, c, x[5], 12, 0x4787c62a);   FF(c, d, a, b, x[6], 17, 0xa8304613);   FF(b, c, d, a, x[7], 22, 0xfd469501);   FF(a, b, c, d, x[8], 7, 0x698098d8);   FF(d, a, b, c, x[9], 12, 0x8b44f7af);   FF(c, d, a, b, x[10], 17, 0xffff5bb1);   FF(b, c, d, a, x[11], 22, 0x895cd7be);   FF(a, b, c, d, x[12], 7, 0x6b901122);   FF(d, a, b, c, x[13], 12, 0xfd987193);   FF(c, d, a, b, x[14], 17, 0xa679438e);   FF(b, c, d, a, x[15], 22, 0x49b40821);     GG(a, b, c, d, x[1], 5, 0xf61e2562);   GG(d, a, b, c, x[6], 9, 0xc040b340);   GG(c, d, a, b, x[11], 14, 0x265e5a51);   GG(b, c, d, a, x[0], 20, 0xe9b6c7aa);   GG(a, b, c, d, x[5], 5, 0xd62f105d);   GG(d, a, b, c, x[10], 9, 0x2441453);   GG(c, d, a, b, x[15], 14, 0xd8a1e681);   GG(b, c, d, a, x[4], 20, 0xe7d3fbc8);   GG(a, b, c, d, x[9], 5, 0x21e1cde6);   GG(d, a, b, c, x[14], 9, 0xc33707d6);   GG(c, d, a, b, x[3], 14, 0xf4d50d87);   GG(b, c, d, a, x[8], 20, 0x455a14ed);   GG(a, b, c, d, x[13], 5, 0xa9e3e905);   GG(d, a, b, c, x[2], 9, 0xfcefa3f8);   GG(c, d, a, b, x[7], 14, 0x676f02d9);   GG(b, c, d, a, x[12], 20, 0x8d2a4c8a);     HH(a, b, c, d, x[5], 4, 0xfffa3942);   HH(d, a, b, c, x[8], 11, 0x8771f681);   HH(c, d, a, b, x[11], 16, 0x6d9d6122);   HH(b, c, d, a, x[14], 23, 0xfde5380c);   HH(a, b, c, d, x[1], 4, 0xa4beea44);   HH(d, a, b, c, x[4], 11, 0x4bdecfa9);   HH(c, d, a, b, x[7], 16, 0xf6bb4b60);   HH(b, c, d, a, x[10], 23, 0xbebfbc70);   HH(a, b, c, d, x[13], 4, 0x289b7ec6);   HH(d, a, b, c, x[0], 11, 0xeaa127fa);   HH(c, d, a, b, x[3], 16, 0xd4ef3085);   HH(b, c, d, a, x[6], 23, 0x4881d05);   HH(a, b, c, d, x[9], 4, 0xd9d4d039);   HH(d, a, b, c, x[12], 11, 0xe6db99e5);   HH(c, d, a, b, x[15], 16, 0x1fa27cf8);   HH(b, c, d, a, x[2], 23, 0xc4ac5665);     II(a, b, c, d, x[0], 6, 0xf4292244);   II(d, a, b, c, x[7], 10, 0x432aff97);   II(c, d, a, b, x[14], 15, 0xab9423a7);   II(b, c, d, a, x[5], 21, 0xfc93a039);   II(a, b, c, d, x[12], 6, 0x655b59c3);   II(d, a, b, c, x[3], 10, 0x8f0ccc92);   II(c, d, a, b, x[10], 15, 0xffeff47d);   II(b, c, d, a, x[1], 21, 0x85845dd1);   II(a, b, c, d, x[8], 6, 0x6fa87e4f);   II(d, a, b, c, x[15], 10, 0xfe2ce6e0);   II(c, d, a, b, x[6], 15, 0xa3014314);   II(b, c, d, a, x[13], 21, 0x4e0811a1);   II(a, b, c, d, x[4], 6, 0xf7537e82);   II(d, a, b, c, x[11], 10, 0xbd3af235);   II(c, d, a, b, x[2], 15, 0x2ad7d2bb);   II(b, c, d, a, x[9], 21, 0xeb86d391);   state[0] += a;   state[1] += b;   state[2] += c;   state[3] += d; } 

MD5算法的調用測試:

int _tmain(int argc, _TCHAR* argv[]) {    int i;   unsigned char encrypt[] = "admin";//21232f297a57a5a743894a0e4a801fc3    unsigned char decrypt[16];    MD5_CTX md5;    MD5Init(&md5);   MD5Update(&md5, encrypt, strlen((char *)encrypt));   MD5Final(&md5, decrypt);    //Md5加密后的32位結果   printf("加密前:%s/n加密后16位:", encrypt);   for (i = 4; i<12; i++)   {     printf("%02x", decrypt[i]);    }    //Md5加密后的32位結果   printf("/n加密前:%s/n加密后32位:", encrypt);   for (i = 0; i<16; i++)   {     printf("%02x", decrypt[i]);    }    getchar();    return 0; }

上面的代碼工程的下載地址:Md5Demo201707.zip

破解MD5加密的網址:http://www.cmd5.com/

感謝鏈接:
http://blog.sina.com.cn/s/blog_693de6100101kcu6.html

https://github.com/JieweiWei/md5

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩欧美综合| 久久99热精品| 亚洲精品久久久一区二区三区| 久久久久久91香蕉国产| 亚洲2020天天堂在线观看| 欧美午夜电影在线| 亚洲午夜av电影| 欧美国产日韩一区二区在线观看| 亚洲欧洲一区二区三区在线观看| 亚洲第一色中文字幕| 成人伊人精品色xxxx视频| 性欧美长视频免费观看不卡| 亚洲美女视频网| 亚洲综合精品一区二区| 亚洲天堂成人在线视频| 91精品综合久久久久久五月天| 欧美精品福利在线| 懂色av影视一区二区三区| 成人免费大片黄在线播放| 国产精品一区二区三区免费视频| 国产精品亚洲精品| 色先锋资源久久综合5566| 波霸ol色综合久久| 久久在精品线影院精品国产| 日韩av片永久免费网站| 国产成+人+综合+亚洲欧美丁香花| 欧美在线观看网站| 一区二区三区回区在观看免费视频| 欧美裸体xxxx| 中文字幕日韩精品在线观看| 欧美性极品xxxx做受| 国产精品久久电影观看| 欧美激情极品视频| 欧洲一区二区视频| 中文字幕日韩专区| 欧洲成人午夜免费大片| 久久人人爽人人爽人人片av高请| 日韩中文字幕视频在线观看| 精品高清一区二区三区| 黑丝美女久久久| 日韩欧美精品在线观看| 亚洲最新中文字幕| 在线成人中文字幕| 色综合久综合久久综合久鬼88| 国产成人综合久久| 国产欧美欧洲在线观看| 亚洲影院色在线观看免费| 欧美激情精品久久久久久久变态| 一区二区亚洲精品国产| 精品亚洲一区二区三区| 欧美主播福利视频| 欧美激情一二三| 国产精品国产三级国产aⅴ9色| 中文字幕最新精品| 日韩欧美中文字幕在线播放| 中文国产成人精品久久一| 久久精品国产久精国产思思| 成人精品一区二区三区电影黑人| 伊人伊人伊人久久| 欧美国产精品日韩| 日韩视频免费在线| 亚洲最大的网站| 色天天综合狠狠色| 91国内产香蕉| 日韩av在线不卡| 欧美成人在线网站| 欧美老妇交乱视频| 青青久久aⅴ北条麻妃| 欧日韩在线观看| 欧美丰满少妇xxxx| 国产91精品视频在线观看| 日韩精品亚洲精品| 日韩在线观看你懂的| 日本视频久久久| www.欧美视频| 欧美大片大片在线播放| 欧美激情视频在线免费观看 欧美视频免费一| 久久国产精品视频| 欧美床上激情在线观看| 日韩中文字幕免费| 亚洲精品动漫久久久久| 亚洲国产精品久久久久秋霞蜜臀| 国产成人精品免高潮在线观看| 欧美日韩午夜剧场| 色老头一区二区三区在线观看| 97欧美精品一区二区三区| 日韩在线视频二区| 国产精品丝袜白浆摸在线| 亚洲自拍偷拍在线| 亚洲第一综合天堂另类专| 国产91精品久久久| 国产精品自拍网| 中文字幕日韩免费视频| 久久夜色精品亚洲噜噜国产mv| 久久国产精品亚洲| 国产视频精品va久久久久久| 亚洲三级黄色在线观看| 欧美性xxxxx极品娇小| 不卡在线观看电视剧完整版| 国产精品成人va在线观看| 欧美国产日韩在线| 日本中文字幕久久看| 日韩美女在线播放| 亚洲第一在线视频| 日韩在线观看免费高清| 亚洲国产日韩欧美综合久久| 久久精品国产v日韩v亚洲| 久久91超碰青草是什么| 亚洲欧美变态国产另类| 日韩成人激情在线| 国产精品免费久久久久影院| 色噜噜狠狠狠综合曰曰曰| 九九热精品视频在线播放| 成年无码av片在线| 国产一区二区在线播放| 日韩高清免费在线| 久久99久国产精品黄毛片入口| 久久久久国产精品www| 91精品国产综合久久香蕉922| 日韩第一页在线| 国产精品无码专区在线观看| 亚洲精品在线观看www| 日韩成人av网址| 亚洲欧美日韩另类| 欧美乱大交做爰xxxⅹ性3| 日韩美女免费线视频| 亚洲成av人片在线观看香蕉| 亚洲第一福利视频| 超碰91人人草人人干| 久久久久久久久久久人体| 久久久久久香蕉网| 国产精品成人在线| 日韩中文字幕视频在线| 欧美亚洲国产日韩2020| 久久精品视频亚洲| 国产精品免费一区二区三区都可以| 欧美亚州一区二区三区| 丝袜美腿精品国产二区| 成人国产精品色哟哟| 久久久女人电视剧免费播放下载| 日韩中文第一页| 国产精品自拍小视频| 国产精品私拍pans大尺度在线| 亚洲第五色综合网| 国产成人精品久久| 欧美精品18videos性欧美| 国产精品嫩草视频| 91精品免费久久久久久久久| 成人免费网站在线| 欧美一区亚洲一区| 久久精品一本久久99精品| 日韩在线视频网| 亚洲视频电影图片偷拍一区| 日韩二区三区在线| 日韩欧美在线观看视频| 97热精品视频官网| 97超碰国产精品女人人人爽| 久久久天堂国产精品女人| 亚洲激情电影中文字幕| 中文国产成人精品久久一| 57pao成人国产永久免费| 精品视频在线观看日韩| 欧美激情啊啊啊| 日韩中文在线不卡|