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

首頁 > 學院 > 邏輯算法 > 正文

php遷移Mcrypt至OpenSSL加密算法的詳細介紹(代碼示例)

2020-03-22 18:04:36
字體:
來源:轉載
供稿:網友
本篇文章給大家?guī)淼膬热菔顷P于php遷移Mcrypt至OpenSSL加密算法的詳細介紹(代碼示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

對稱加解密算法中,當前最為安全的是 AES 加密算法(以前應該是是 DES 加密算法),PHP 提供了兩個可以用于 AES 加密算法的函數(shù)簇:Mcrypt 和 OpenSSL。

其中 Mcrypt 在 PHP 7.1.0 中被 Deprecated,在 PHP 7.2.0 中被移除,所以即可起你應該使用 OpenSSL 來實現(xiàn) AES 的數(shù)據(jù)加解密。

在一些場景下,我們不能保證兩套通信系統(tǒng)都使用了相函數(shù)簇去實現(xiàn)加密算法,可能 siteA 使用了最新的 OpenSSL 來實現(xiàn)了 AES 加密,但作為第三方服務的 siteB 可能仍在使用 Mcrypt 算法,這就要求我們必須清楚 Mcrypt 同 OpenSSL 之間的差異,以便保證數(shù)據(jù)加解密的一致性。

下文中我們將分別使用 Mcrypt 和 OpenSSL 來實現(xiàn) AES-128/192/256-CBC 加解密,二者同步加解密的要點為:

1、使用何種填充算法。Mcrypt 自動使用 NUL( //0 ),OpenSSL 自動使用 PKCS7。
2、否對數(shù)據(jù)做了base64編碼處理。Mcrypt 默認不使用 base64 編碼(雖然我們很建議使用),OpenSSL 默認使用 base64編碼。

協(xié)同好以上兩點,就可以讓 Mcrypt 和 OpenSSL 之間一致性的對數(shù)據(jù)進行加解密。

AES 概述

AES 是當前最為常用的安全對稱加密算法,關于對稱加密這里就不在闡述了。

AES 有三種算法,主要是對數(shù)據(jù)塊的大小存在區(qū)別:
AES-128:需要提供 16 位的密鑰 key
AES-192:需要提供 24 位的密鑰 key
AES-256:需要提供 32 位的密鑰 key

填充算法

AES 是按數(shù)據(jù)塊大?。?28/192/256)對待加密內容進行分塊處理的,會經常出現(xiàn)最后一段數(shù)據(jù)長度不足的場景,這時就需要填充數(shù)據(jù)長度到加密算法對應的數(shù)據(jù)塊大小。

主要的填充算法有填充 NUL( 0 ) 和 PKCS7,Mcrypt 默認使用的 NUL( 0 ) 填充算法,當前已不被推薦,OpenSSL 則默認模式使用 PKCS7 對數(shù)據(jù)進行填充并對加密后的數(shù)據(jù)進行了 base64encode 編碼,所以建議開發(fā)中使用 PKCS7 對待加密數(shù)據(jù)進行填充,已保證通用性(alipay sdk 中雖然使用了 Mcrypt 加密簇,但使用 PKCS7 算法對數(shù)據(jù)進行了填充,這樣在一定程度上親和了 OpenSSL 加密算法)。

NUL( /0 ) 填充算法

Mcrypt 的默認填充算法。NUL 即為 Ascii 表的編號為 0 的元素,即空元素,轉移字符是 /0 ,PHP 的 pack 打包函數(shù)在 a 模式下就是以 NUL 字符對內容進行填充的,當然,使用 /0 手動拼接也是可以的。

/** * NUL( /0 )填充算法 * @param string $source * @return stringfunction addZeroPadding($source, $cipher = MCRYPT_RIJNDAEL_128, $mode = MCRYPT_MODE_CBC) $source = trim($source); // openssl 并沒有提供加密cipher對應的數(shù)據(jù)塊大小的api這點比較坑 $block = mcrypt_get_block_size($cipher, $mode); $pad = $block - (strlen($source) % $block); if ($pad = $block) { // $source .= str_repeat( /0 , $pad);//KISS寫法 // pack 方法 a 模式使用 NUL( /0 ) 對內容進行填充 A 模式則使用空白字符填充 $source .= pack( a{$pad} , //高端寫法 return $source; * NUL( /0 )填充算法移除 * @param string $source * @return stringfunction stripZeroPadding($source) return rtrim($source, /0 }

PKCS7 填充算法

OpenSSL的默認填充算法。下面我們給出 PKCS7 填充算法 PHP 的實現(xiàn):

/** * PKCS7填充算法 * @param string $source * @return stringfunction addPKCS7Padding($source, $cipher = MCRYPT_RIJNDAEL_128, $mode = MCRYPT_MODE_CBC) $source = trim($source); $block = mcrypt_get_block_size($cipher, $mode); $pad = $block - (strlen($source) % $block); if ($pad = $block) { $char = chr($pad); $source .= str_repeat($char, $pad); return $source; * 移去PKCS7填充算法 * @param string $source * @return stringfunction stripPKSC7Padding($source) $source = trim($source); $char = substr($source, -1); $num = ord($char); if ($num == 62) { return $source; $source = substr($source, 0, -$num); return $source;}
Mcrypt

默認使用 NUL( /0 ) 自動對待加密數(shù)據(jù)進行填充以對齊加密算法數(shù)據(jù)塊長度。

獲取 mcrypt 支持的算法,這里我們只關注 AES 算法。

$cipher_list = mcrypt_list_algorithms();print_r($cipher_list);// 加密算法名稱 對應的 常量標識// rijndael-128 == MCRYPT_RIJNDAEL_128// rijndael-192 == MCRYPT_RIJNDAEL_192// rijndael-256 == MCRYPT_RIJNDAEL_256

注意:mcrypt 雖然支持 AES 三種算法,但除 MCRYPT_RIJNDAEL_128 外,MCRYPT_RIJNDAEL_192/256 并未遵循 AES-192/256 標準進行加解密的算法,即如果你同其他系統(tǒng)通信(java/.net),使用 MCRYPT_RIJNDAEL_192/256 可能無法被其他嚴格按照 AES-192/256 標準的系統(tǒng)正確的數(shù)據(jù)解密。官方文檔頁面中也有人在 User Contributed Notes 中提及。這里給出如何使用 mcrpyt 做標注的 AES-128/192/256 加解密

AES-128-CBC = mcrpyt(cipher MCRYPT_RIJNDAEL_128 + key 16位 + iv 16 位 + mode MCRYPT_MODE_CBC)
AES-192-CBC = mcrpyt(cipher MCRYPT_RIJNDAEL_128 + key 24位 + iv 16 位 + mode MCRYPT_MODE_CBC)
AES-256-CBC = mcrpyt(cipher MCRYPT_RIJNDAEL_128 + key 32位 + iv 16 位 + mode MCRYPT_MODE_CBC)

即算法統(tǒng)一使用 MCRYPT_RIJNDAEL_128,并通過 key 的位數(shù) 來選定是以何種 AES 標準做的加密,iv 是建議添加且建議固定為16位(OpenSSL的 AES加密 iv 始終為 16 位,便于統(tǒng)一對齊),mode 選用的 CBC 模式。

mcrypt 在對數(shù)據(jù)進行加密處理時,如果發(fā)現(xiàn)數(shù)據(jù)長度與使用的加密算法的數(shù)據(jù)塊長度未對齊,則會自動使用 /0 對待加密數(shù)據(jù)進行填充,但 /0 填充模式已不再被推薦,為了與其他系統(tǒng)有更好的兼容,建議大家手動對數(shù)據(jù)進行 PKCS7 填充。

OpenSSL

openssl 簇加密方法更為簡單明確,mcrypt 還要將加密算法分為 cipher + mode 去指定,openssl 則只需要直接指定 method 為 AES-128-CBC,AES-192-CBC,AES-256-CBC 即可。且提供了三種數(shù)據(jù)處理模式,即 默認模式 0 / OPENSSL_RAW_DATA/ OPENSSL_ZERO_PADDING。

openssl 默認的數(shù)據(jù)填充方式是 PKCS7,為兼容 mcrpty 也提供處理 0 填充的數(shù)據(jù)的模式,具體為下:

//我們只看部分參數(shù) 還有一些默認參數(shù)沒列出// 加密openssl_encrypt(string $data, string $method, string $key, int $options = 0, string $iv = )// 解密openssl_decrypt(string $data, string $method, string $key, int $options = 0, string $iv = )

options 參數(shù)即為重要,它是兼容 mcrpty 算法的關鍵:

options = 0: 默認模式,自動對明文進行 pkcs7 padding,且數(shù)據(jù)做 base64 編碼處理。
options = 1: OPENSSL_RAW_DATA,自動對明文進行 pkcs7 padding, 且數(shù)據(jù)未經 base64 編碼處理。
options = 2: OPENSSL_ZERO_PADDING,要求待加密的數(shù)據(jù)長度已按 0 填充與加密算法數(shù)據(jù)塊長度對齊,即同 mcrpty 默認填充的方式一致,且對數(shù)據(jù)做 base64 編碼處理。注意,此模式下 openssl 要求待加密數(shù)據(jù)已按 0 填充好,其并不會自動幫你填充數(shù)據(jù),如果未填充對齊,則會報錯。

故可以得出 mcrpty簇 與 openssl簇 的兼容條件如下:

1、如果 A 系統(tǒng)使用了 mcrypt 的默認的 /0 自動填充算法進行了數(shù)據(jù)加密,那 B 系統(tǒng)使用 openssl 進行解密時,需要選擇 OPENSSL_ZERO_PADDING 模式。這里同時要特別注意,OPENSSL_ZERO_PADDING 模式是認為數(shù)據(jù)是做了 base64 編碼處理的,如果 A 系統(tǒng) mcrpty 沒有對數(shù)據(jù)做 base64_encode 處理,則 B 解密數(shù)據(jù)時還需要將數(shù)據(jù) base64_encode 后再傳遞給 openssl_decrypt。2、如果 A 系統(tǒng)手動使用了 PKCS7 對待加密數(shù)據(jù)做了處理,那 B 系統(tǒng)只需根據(jù) A 系統(tǒng)是否對數(shù)據(jù)做了 base64 編碼處理選擇 0或 OPENSSL_ZERO_PADDING 模式即可。如果對 A 使用了 base64 編碼,則 B 使用 0 模式;如果 A 沒有使用 base64 編碼,則使用 OPENSSL_RAW_DATA 模式。加解密實例

建議將源碼復制到本地運行,根據(jù)運行結果更好理解。

 ?php * MCRYPT_RIJNDAEL_128 CBC + 16位Key + 16位iv = openssl_encrypt(AES-128-CBC, 16位Key, 16位iv) = AES-128 * MCRYPT_RIJNDAEL_128 CBC + 24位Key + 16位iv = openssl_encrypt(AES-192-CBC, 24位Key, 16位iv) = AES-192 * MCRYPT_RIJNDAEL_128 CBC + 32位Key + 16位iv = openssl_encrypt(AES-256-CBC, 32位Key, 16位iv) = AES-256 * ------------------------------------------------------------------------------------------------------ * openssl_簇 options * 0 : 默認模式,自動對數(shù)據(jù)做 pkcs7 填充, 且返回的加密數(shù)據(jù)經過 base64 編碼 * 1 : OPENSSL_RAW_DATA, 自動對數(shù)據(jù)做 pkcs7 填充, 且返回的加密數(shù)據(jù)未經過 base64 編碼 * 2 : OPENSSL_ZERO_PADDING, 處理使用 NUL( /0 ) 的數(shù)據(jù),故需手動使用 NUL( /0 ) 填充好數(shù)據(jù)再做加密處理,如未做則會報錯 * -------------------------------------------------------------------------------------------------------- * 加密工具類// mcrypt AES 固定使用 MCRYPT_RIJNDAEL_128 通過 key 的長度來決定具體使用的具體何種 AES$mcrypt_cipher = MCRYPT_RIJNDAEL_128;$mcrypt_mode = MCRYPT_MODE_CBC;// aes-128=16 aes-192=24 aes-256=32$key_size = 16;$key = get_random_str($key_size);// openssl AES 向量長度固定 16 位 這里為兼容建議固定長度為 16 位$iv_size = 16;$iv = get_random_str($iv_size);// 隨機字符串function get_random_str($length = 16) $char_set = array_merge(range( a , z ), range( A , Z ), range( 0 , 9  shuffle($char_set); return implode( , array_slice($char_set, 0, $length)); * 加密算法 * @param string $content 待加密數(shù)據(jù) * @param string $key 加密key 注意 key 長度要求 * @param string $iv 加密向量 固定為16位可以保證與openssl的兼容性 * @param string $cipher 加密算法 * @param string $mode 加密模式 * @param bool $pkcs7 是否使用pkcs7填充 否則使用 mcrypt 自帶的 NUL( /0 ) 填充 * @param bool $base64 是否對數(shù)據(jù)做 base64 處理 因加密后數(shù)據(jù)會有非打印字符 所以推薦做 base64 處理 * @return string 加密后的內容function user_mcrypt_encrypt($content, $key, $iv, $cipher = MCRYPT_RIJNDAEL_128, $mode = MCRYPT_MODE_CBC, $pkcs7 = true, $base64 = true) //AES, 128 模式加密數(shù)據(jù) CBC $content = $pkcs7 ? addPKCS7Padding($content) : $content; $content_encrypted = mcrypt_encrypt($cipher, $key, $content, $mode, $iv); return $base64 ? base64_encode($content_encrypted) : $content_encrypted; * 解密算法 * @param [type] $content_encrypted 待解密的內容 * @param [type] $key 加密key 注意 key 長度要求 * @param [type] $iv 加密向量 固定為16位可以保證與openssl的兼容性 * @param [type] $cipher 加密算法 * @param [type] $mode 加密模式 * @param bool $pkcs7 帶解密內容是否使用了pkcs7填充 如果沒使用則 mcrypt 會自動移除填充的 NUL( /0 ) * @param bool $base64 是否對數(shù)據(jù)做 base64 處理 * @return [type] [description]function user_mcrypt_decrypt($content_encrypted, $key, $iv, $cipher = MCRYPT_RIJNDAEL_128, $mode = MCRYPT_MODE_CBC, $pkcs7 = true, $base64 = true) //AES, 128 模式加密數(shù)據(jù) CBC $content_encrypted = $base64 ? base64_decode($content_encrypted) : $content_encrypted; $content = mcrypt_decrypt($cipher, $key, $content_encrypted, $mode, $iv); // 解密后的內容 要根據(jù)填充算法來相應的移除填充數(shù) $content = $pkcs7 ? stripPKSC7Padding($content) : rtrim($content, /0  return $content; * PKCS7填充算法 * @param string $source * @return stringfunction addPKCS7Padding($source, $cipher = MCRYPT_RIJNDAEL_128, $mode = MCRYPT_MODE_CBC) $source = trim($source); $block = mcrypt_get_block_size($cipher, $mode); $pad = $block - (strlen($source) % $block); if ($pad = $block) { $char = chr($pad); $source .= str_repeat($char, $pad); return $source; * 移去PKCS7填充算法 * @param string $source * @return stringfunction stripPKSC7Padding($source) $source = trim($source); $char = substr($source, -1); $num = ord($char); if ($num == 62) { return $source; $source = substr($source, 0, -$num); return $source; * NUL( /0 )填充算法 * @param string $source * @return stringfunction addZeroPadding($source, $cipher = MCRYPT_RIJNDAEL_128, $mode = MCRYPT_MODE_CBC) $source = trim($source); // openssl 并沒有提供加密cipher對應的數(shù)據(jù)塊大小的api這點比較坑 $block = mcrypt_get_block_size($cipher, $mode); $pad = $block - (strlen($source) % $block); if ($pad = $block) { // $source .= str_repeat( /0 , $pad);//KISS寫法 // pack 方法 a 模式使用 NUL( /0 ) 對內容進行填充 A 模式則使用空白字符填充 $source .= pack( a{$pad} , //高端寫法 return $source; * NUL( /0 )填充算法移除 * @param string $source * @return stringfunction stripZeroPadding($source) return rtrim($source, /0 // 待加密內容$content = hello world echo 使用 NUL( /0 ) 填充算法 不對結果做 base64 處理: . PHP_EOL;echo mcrypt 加密: . PHP_EOL;var_dump($data = user_mcrypt_encrypt($content, $key, $iv, $mcrypt_cipher, $mcrypt_mode, false, false));echo openssl 解密: . PHP_EOL;// 需經過 NUL( /0 ) 填充加密后被 base64_encode 的數(shù)據(jù) 解密后續(xù)手動移除 NUL( /0 )var_dump(stripZeroPadding(openssl_decrypt(base64_encode($data), AES-128-CBC , $key, OPENSSL_ZERO_PADDING, $iv)));echo openssl 加密: . PHP_EOL;// 需對待處理的數(shù)據(jù)做 NUL( /0 ) 填充,且返回的數(shù)據(jù)被 base64_encode 編碼了var_dump($data = base64_decode(openssl_encrypt(addZeroPadding($content), AES-128-CBC , $key, OPENSSL_ZERO_PADDING, $iv)));echo mcrypt 解密: . PHP_EOL;var_dump(user_mcrypt_decrypt($data, $key, $iv, $mcrypt_cipher, $mcrypt_mode, false, false));echo PHP_EOL;echo 使用 NUL( /0 ) 填充算法 對結果做 base64 處理: . PHP_EOL;echo mcrypt 加密: . PHP_EOL;var_dump($data = user_mcrypt_encrypt($content, $key, $iv, $mcrypt_cipher, $mcrypt_mode, false, true));echo openssl 解密: . PHP_EOL;var_dump(stripZeroPadding(openssl_decrypt($data, AES-128-CBC , $key, OPENSSL_ZERO_PADDING, $iv)));echo openssl 加密: . PHP_EOL;var_dump($data = openssl_encrypt(addZeroPadding($content), AES-128-CBC , $key, OPENSSL_ZERO_PADDING, $iv));echo mcrypt 解密: . PHP_EOL;var_dump(user_mcrypt_decrypt($data, $key, $iv, $mcrypt_cipher, $mcrypt_mode, false, true));echo PHP_EOL;echo 使用 pkcs7 填充算法 不對結果做 base64 處理 . PHP_EOL;echo mcrypt 加密: . PHP_EOL;var_dump($data = user_mcrypt_encrypt($content, $key, $iv, $mcrypt_cipher, $mcrypt_mode, true, false));echo openssl 解密: . PHP_EOL;var_dump(openssl_decrypt($data, AES-128-CBC , $key, OPENSSL_RAW_DATA, $iv));echo openssl 加密: . PHP_EOL;var_dump($data = openssl_encrypt($content, AES-128-CBC , $key, OPENSSL_RAW_DATA, $iv));echo mcrypt 解密: . PHP_EOL;var_dump(user_mcrypt_decrypt($data, $key, $iv, $mcrypt_cipher, $mcrypt_mode, true, false));echo PHP_EOL;echo 使用 pkcs7 填充算法 對結果做 base64 處理(推薦): . PHP_EOL;echo mcrypt 加密: . PHP_EOL;var_dump($data = user_mcrypt_encrypt($content, $key, $iv, $mcrypt_cipher, $mcrypt_mode, true, true));echo openssl 解密: . PHP_EOL;var_dump(openssl_decrypt($data, AES-128-CBC , $key, 0, $iv));echo openssl 加密: . PHP_EOL;var_dump($data = openssl_encrypt($content, AES-128-CBC , $key, 0, $iv));echo mcrypt 解密: . PHP_EOL;var_dump(user_mcrypt_decrypt($data, $key, $iv, $mcrypt_cipher, $mcrypt_mode, true, true));

總結要點

1、二者使用的何種填充算法。
2、二者對數(shù)據(jù)是否有 base64 編碼要求。
3、mcrypt 需固定使用 MCRYPT_RIJNDAEL_128,并通過調整 key 的長度 16, 24,32 來實現(xiàn) ase-128/192/256 加密算法。同時二者 IV 長度都應該是。

以上就是php遷移Mcrypt至OpenSSL加密算法的詳細介紹(代碼示例)的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
91视频免费网址| 九色91在线视频| 亚洲人成77777在线观看网| 日韩午夜影院| 亚洲欧美一区二区不卡| 国产日本久久| 日本亚洲三级在线| 一区二区高清在线| 五月婷婷激情视频| 在线免费观看a级片| 成人高清在线视频| 欧美一级免费播放| 日韩五码在线| 亚洲第一毛片| 国产偷激情在线| 亚洲人成在线观看一区二区| 亚洲综合中文字幕在线| 有色激情视频免费在线| 538国产精品一区二区在线| 国产 日韩 欧美 综合| av片在线观看| 欧美成人se01短视频在线看| 国产精品国产三级在线观看| 国产一区二区三区在线观看视频| 精品国产乱码久久久久久闺蜜| 欧洲在线/亚洲| 日本不卡一区二区三区视频| 亚洲素人一区二区| 国产女人18毛片水真多| 天干天干啦夜天天天视频| 国产无遮挡裸体免费久久| 久久99久久久久久久噜噜| 久久免费区一区二区三波多野| 国产福利精品av综合导导航| 岛国一区二区三区高清视频| 日韩和欧美一区二区三区| 国产精品久久久久久麻豆一区软件| 日韩成人av在线| 亚洲 欧美 激情 小说 另类| 日韩三级电影| 91网站在线看| 影音先锋欧美在线| 欧美日韩国产三区| 亚洲一区二区三区四区五区黄| 在线观看成人av电影| 一区二区三区欧美| 久久免费精品一区二区| 秋霞成人午夜鲁丝一区二区三区| 在线女人免费视频| 超碰97网站| 成人av在线一区二区| 一区二区电影| 国产一区二区在线观看免费播放| 亚洲天堂福利av| 欧美色123| 日韩尤物视频| 色婷婷av一区二区三区软件| 国产河南妇女毛片精品久久久| 91黄视频在线观看| 国产又猛又粗| 欧美在线免费| 一二三四在线观看视频韩国| 少妇精品一区二区三区| 毛片手机在线观看| 国产精品久久久久久久久影视| 国产精品99久久99久久久二8| wwwxx日本| 国产精品视频一区二区三区麻豆| 91国在线视频| 女人喷潮完整视频| eeuss草民免费| 亚洲成人在线观看视频| 亚洲欧洲另类国产综合| a视频在线观看免费| 免费看一级大片| 国产三区在线成人av| 成人啪啪免费看| 欧美精品一区二区高清在线观看| 1769国产精品视频| 中文人妻熟女乱又乱精品| 日韩激情一二三区| 亚洲国产精品免费| 日韩欧美黄色网址| 亚洲天堂视频一区| 999精品在线| 久久婷婷五月综合| 免费黄网在线观看| 福利91精品一区二区三区| 国产精品大尺度| 免费观看黄一级视频| 亚洲精选在线| **亚洲第一综合导航网站| 最新国产精品精品视频| 在线毛片网站| 免费在线日本| 欧美日韩国产高清一区二区| 日本一区二区在线视频观看| 亚洲va在线观看| 久久99在线观看| av在线麻豆| 国产在线播放91| 欧美黑人巨大videos精品| 日韩经典一区二区| 手机看片国产1024| 国产亚洲精品久久久久婷婷瑜伽| 中文字幕丰满乱子伦无码专区| 最新亚洲国产精品| 久久网站免费观看| 久久精品视频一区二区三区| 色老综合老女人久久久| 久久久亚洲影院| 性欧美freesex顶级少妇| 99久久久无码国产精品6| 日韩欧美中文字幕在线视频| 欧美多人爱爱视频网站| 妺妺窝人体色www看人体| 视频一区二区三区在线看免费看| 亚洲国产aⅴ成人精品无吗| xxxxxwwww免费视频| 亚洲一区二区中文字幕在线观看| 97精品国产aⅴ7777| 欧美日韩综合一区二区三区| 国产精品女主播| 亚洲视频一区二区三区| 免费成人在线视频观看| 黄色www网站| 精品久久九九| 亚洲第一中文av| 日韩欧美国产一区二区三区| 国产网站免费在线观看| 午夜免费久久久久| 亚洲精品手机在线观看| 亚洲视频一区二区在线观看| 精品奇米国产一区二区三区| 又黄又骚的视频| 国产欧美日本一区视频| 欧美精品一区三区| 麻豆精品永久免费视频| chinese偷拍一区二区三区| 男人天堂视频在线观看| 韩国v欧美v亚洲v日本v| 黄网在线观看视频| 亚洲人成电影在线播放| 在线中文字幕播放| 国产精品成人一区二区三区吃奶| 好看的日韩av电影| 91九色对白| 日韩精品一区在线观看| 日韩国产第一页| 国产综合香蕉五月婷在线| 国产乡下妇女做爰毛片| 中文字幕欧美日韩在线不卡| 每日在线观看av| 亚洲伊人av| 国产欧美日韩在线一区二区| 国产毛片av在线| 国产精品永久久久久久久久久| 国产一级久久久| 亚洲欧美日韩精品久久| 一区二区视频免费在线观看| 国产精品夜夜嗨| 国产亚洲视频在线| 亚洲国产国产亚洲一二三| 成人免费视频一区| 日韩在线观看高清| 国产成人午夜电影网| 日日夜夜综合网| 国产精品视频第一区二区三区| 性色国产成人久久久精品| 亚洲欧美激情小说另类| 欧美精品乱码久久久久久按摩| 麻豆av在线播放| 91成人免费电影| 国产精品99久久久久久似苏梦涵| 在线免费成人| 无码一区二区三区在线| 麻豆成人在线播放| 久久综合久久88| 超碰在线一区二区三区| 亚洲欧美另类在线视频| 欧美久久高跟鞋激| 亚洲影音一区| 在线heyzo| 国产自偷自偷免费一区| 国产成+人+综合+亚洲欧洲| 国产精品久久久久永久免费观看| 国产九九在线视频| 国产精品无码专区在线观看| 亚洲码无人客一区二区三区| 亚洲有吗中文字幕| 久久日本片精品aaaaa国产| 欧美成人tv| 欧洲亚洲两性| 亚洲精品国产精品国自产观看浪潮| 五月婷婷激情综合| 久久国产生活片100| 精品一区二区三区日本| 无码无遮挡又大又爽又黄的视频| 成视频在线观看免费观看| 2019中文字幕在线观看| 国产精品自拍视频一区| 草碰在线视频| 香艳视频网站| 国产成人免费在线视频| 久久国内精品| 亚洲精品国产suv| 九色视频网站在线观看| 99视频日韩| 伊人影院在线观看视频| 极品少妇xxxx偷拍精品少妇| 久久精品国产一区二区| 国产精品变态另类虐交| 欧美三级成人观看| www日本视频| 最近免费中文字幕在线第一页| 日韩精品视频一区二区在线观看| 欧美日韩一区二区三区在线播放| 亚洲美女色禁图| 性高潮视频在线观看| 69av二区| 亚洲图片小说综合| 情趣网站在线观看| 欧美最新精品| 成人99免费视频| 精品国产成人| 中文字幕91视频| 欧美在线观看18| 国产婷婷色一区二区在线观看| 黄色网页大全| 亚洲自拍偷拍另类| 黄色三级高清在线播放| 一级黄在线观看| 成人黄色短视频在线观看| 无遮挡又色又刺激的女人视频| 资源网第一页久久久| 一区在线观看视频| 亚洲一区二区三区在线观看网站| 欧美深性狂猛ⅹxxx深喉| 污污视频在线免费看| 国产一二三四在线| 99热国产精品| 亚洲黄色av网站| 亚洲免费看黄网站| 精品一区二区三区的国产在线播放| 久久av少妇| 欧美一区二区视频免费观看| 中文字幕在线视频第一页| 老司机亚洲精品| 国产嫩草一区二区三区在线观看| 亚洲国产精品第一区二区| 国产免费裸体视频| 精品动漫一区二区三区在线观看| 黑人精品一区二区| 亚洲精品视频免费| 国产激情久久| 影音先锋男人在线资源| 欧美一区二区三区视频免费| 国产在线一区二区三区| 国产精品对白一区二区三区| 91精品国产91久久久久久久久| 在线看黄色网| 2023国产精品久久久精品双| 欧美体内she精视频在线观看| 五月婷婷开心综合| 国模大尺度私拍在线视频| 日韩欧美一区二区三区免费看| 99国产精品免费网站| 老司机aⅴ在线精品导航| 欧美午夜性春猛xxxx| 国产一区二区视频在线观看免费| 亚洲免费视频在线| 91成人网在线观看| 欧美激情免费看| 日韩成人av毛片| 一二三在线视频社区| 欧美少妇一区| 成人动漫视频在线观看完整版| av在线免费网站| 久久久久亚洲视频| 久久精品一区二区三区不卡牛牛| 亚洲成av人片一区二区三区| 国产91在线视频| 色婷婷综合成人av| **网站欧美大片在线观看| 依依成人综合视频| 久久免费一级片| 国产日韩视频在线| 欧美高清电影在线| 欧美激情啊啊啊| 视频黄页在线| 亚洲精品国产无码| 成人午夜电影免费在线观看| 国产野外战在线播放| 98色花堂精品视频在线观看| 麻豆免费版在线观看| 国产精品久久精品日日| 在线免费福利| 国产精品久久二区二区| 国产免费黄色一级片| 免费在线一区二区三区| 红桃视频国产精品| 国产精品99爱免费视频| 亚洲综合精品四区| 4438全国亚洲精品在线观看视频| 亚洲草久电影| 美女黄a一级视频| 97视频在线观看免费| 噜噜噜91成人网| 久久综合亚洲| 蜜桃麻豆av在线| 国产盗摄在线观看| 国产一级在线观看www色| 国产在线视频一区二区| 国产成人久久久精品一区| 被男人吃奶添下面好舒服动态图| 9久re热视频在线精品| av女优在线播放| 91色在线porny| 久久视频一区| 欧美黄色录像片| 91在线播放网址| 国产成人免费在线观看不卡| 精品剧情v国产在线观看| 2017亚洲男人天堂| 亚洲精品免费电影| 青青草国产成人99久久| 天天干天天插天天射| 国产在线成人|