亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? keyoperation.cpp

?? Microsoft CryptoAPI 加解密技術(shù)源代碼實(shí)例
?? CPP
字號(hào):
// KeyOperation.cpp: implementation of the CKeyOperation class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "CSPtest.h"
#include "KeyOperation.h"
#include "wincrypt.h"


#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CKeyOperation::CKeyOperation()
{
	m_hProv = 0; //加密提供商句柄
	m_hKey = 0;  //密鑰對(duì)句柄
}

CKeyOperation::~CKeyOperation()
{

}


/**********************************************************************
+函數(shù)名稱: CRYPTAPI_GenRsaKey(int nFlag)
+輸入?yún)?shù): nFlag 密鑰對(duì)類型 1.簽名密鑰對(duì) 2. 加密密鑰對(duì)
+輸出參數(shù): 無
+返回值:
+其他說明:通過函數(shù)產(chǎn)生RSA密鑰對(duì)
***********************************************************************/
int CKeyOperation::CRYPTAPI_GenRsaKey(int nFlag)
{
	//刪除CSP中存在的容器
	CryptAcquireContext(&m_hProv, "RSA", MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_DELETEKEYSET);

	if(!CryptAcquireContext(&m_hProv, "RSA", MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET))
		return -1;

	//產(chǎn)生非對(duì)稱密鑰對(duì)
	if(nFlag == 1)
	{
		if(!CryptGenKey(m_hProv, AT_SIGNATURE, CRYPT_EXPORTABLE, &m_hKey))
		{
			//刪除容器 釋放上下文
			CryptAcquireContext(&m_hProv, "RSA", MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_DELETEKEYSET);
			if(m_hProv)
				CryptReleaseContext(m_hProv, 0);
			return -3;
		}
	}
	else if(nFlag == 2)
	{
		if(!CryptGenKey(m_hProv, AT_KEYEXCHANGE, CRYPT_EXPORTABLE, &m_hKey))
		{
			//刪除容器 釋放上下文
			CryptAcquireContext(&m_hProv, "RSA", MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_DELETEKEYSET);
			if(m_hProv)
				CryptReleaseContext(m_hProv, 0);
			return -4;
		}
	}
	else
	{
		CryptAcquireContext(&m_hProv, "RSA", MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_DELETEKEYSET);
			if(m_hProv)
				CryptReleaseContext(m_hProv, 0);
			return -5;
	}

	return 0;
}

/**********************************************************************
+函數(shù)名稱: CRYPTAPI_ExportPubKey(int nFlag, unsigned char *pbPubKeyData, int &nDataLen)
+輸入?yún)?shù): nFlag 密鑰對(duì)類型 1.簽名密鑰對(duì) 2. 加密密鑰對(duì) 
+		   pbPubKeyData 公鑰數(shù)據(jù)
+		   nDataLen 公鑰數(shù)據(jù)長(zhǎng)度
+輸出參數(shù): nDataLen 公鑰數(shù)據(jù)長(zhǎng)度
+			pbPubKeyData 公鑰數(shù)據(jù)
+返回值:
+其他說明:將產(chǎn)生的RSA密鑰對(duì)的公鑰導(dǎo)出
***********************************************************************/

int CKeyOperation::CRYPTAPI_ExportPubKey(int nFlag, unsigned char *pbPubKeyData, int &nDataLen)
{
	int r;

	unsigned char *szPubBlob;
	int nPubBlobLen;

	r = CRYPTAPI_GenRsaKey(nFlag);
	if(r != 0)
	{
		if(m_hProv)
			CryptReleaseContext(m_hProv, 0);
		return -1;
	}
	
	r = CryptExportKey(m_hKey, NULL, PUBLICKEYBLOB, NULL, NULL, (unsigned long *)&nPubBlobLen);
	if(!r)
	{
		if(m_hProv)
			CryptReleaseContext(m_hProv, 0);
		return -2;
	}
	
	szPubBlob = (unsigned char *)malloc(nPubBlobLen+1); //分配緩沖區(qū)
	
	r = CryptExportKey(m_hKey, NULL, PUBLICKEYBLOB, NULL, szPubBlob, (unsigned long *)&nPubBlobLen);
	int b = GetLastError();
	if(!r)
	{
		if(m_hProv)
			CryptReleaseContext(m_hProv, 0);
		free(szPubBlob);
			return -3;
	}
	
	nDataLen = nPubBlobLen;
	memcpy(pbPubKeyData, szPubBlob, nPubBlobLen);
	
	return 0;
}

/**********************************************************************
+函數(shù)名稱: CRYPTAPI_RSAEncrypt(unsigned char *pbSrcData, int nSrcLen, 
+				unsigned char *pbDestData, int &nDestLen)
+輸入?yún)?shù): pbSrcData 待加密數(shù)據(jù)
+			nSrcLen  待加密數(shù)據(jù)長(zhǎng)度
+			pbDestData 加密后數(shù)據(jù)
+			nDestLen 加密后數(shù)據(jù)長(zhǎng)度
+輸出參數(shù): pbDestData 加密后數(shù)據(jù)
+			nDestLen 加密后數(shù)據(jù)長(zhǎng)度
+返回值:
+其他說明:使用加密私鑰來加密數(shù)據(jù)(注意CSP默認(rèn)的非對(duì)稱加密數(shù)據(jù)長(zhǎng)度不能超過 117個(gè)字節(jié))
***********************************************************************/
int CKeyOperation::CRYPTAPI_RSAEncrypt(unsigned char *pbSrcData, int nSrcLen, unsigned char *pbDestData, int &nDestLen)
{
	int r;
	
	CryptAcquireContext(&m_hProv, "ASYENCRYPT", MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_DELETEKEYSET);

	if(!CryptAcquireContext(&m_hProv, "ASYENCRYPT", MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET))
		return -1;
	
	//產(chǎn)生密鑰對(duì)	
	if(!CryptGenKey(m_hProv, AT_KEYEXCHANGE, CRYPT_EXPORTABLE, &m_hKey))
	{
		//刪除容器
		CryptAcquireContext(&m_hProv, "ASYENCRYPT", MS_ENHANCED_PROV, 
								PROV_RSA_FULL, CRYPT_DELETEKEYSET);
		CryptReleaseContext(m_hProv, 0);
		return -2;
	}

	r = CryptEncrypt(m_hKey, 0, TRUE, 0, pbSrcData, (unsigned long *)&nSrcLen, 128);
	if(!r)
	{
		if(m_hProv)
			CryptReleaseContext(m_hProv, 0);
		if(m_hKey)
			CryptDestroyKey(m_hKey);
		return -2;
	}

	nDestLen = nSrcLen;
	memcpy(pbDestData, pbSrcData, nDestLen);

	if(m_hKey)
			CryptDestroyKey(m_hKey);
	if(m_hProv)
			CryptReleaseContext(m_hProv, 0);
		
	return 0;
}

/**********************************************************************
+函數(shù)名稱: CRYPTAPI_RSADecrypt(unsigned char *pbSrcData, int nSrcLen, 
+				unsigned char *pbDestData, int &nDestLen)
+輸入?yún)?shù): pbSrcData 待解密數(shù)據(jù)
+			nSrcLen  待解密數(shù)據(jù)長(zhǎng)度
+			pbDestData 解密后數(shù)據(jù)
+			nDestLen 解密后數(shù)據(jù)長(zhǎng)度
+輸出參數(shù): pbDestData 解密后數(shù)據(jù)
+			nDestLen 解密后數(shù)據(jù)長(zhǎng)度
+返回值:
+其他說明:使用加密公鑰來解密數(shù)據(jù)(由于定義是成員變量m_hProv, m_hKey所以必須解密前要先執(zhí)行加密,這樣才能保證私鑰不被覆蓋)
***********************************************************************/

int CKeyOperation::CRYPTAPI_RSADecrypt(unsigned char *pbSrcData, int nSrcLen, unsigned char *pbDestData, int &nDestLen)
{
	if(!CryptAcquireContext(&m_hProv, "ASYENCRYPT", MS_ENHANCED_PROV, PROV_RSA_FULL, 0))
		return -1;

	//獲得用戶加密私鑰句柄
	if(!CryptGetUserKey(m_hProv, AT_KEYEXCHANGE, &m_hKey))
	{
		if(m_hProv)
			CryptReleaseContext(m_hProv, 0);
		return -2;
	}

	//開始解密數(shù)據(jù)
	int r = CryptDecrypt(m_hKey, 0, TRUE, 0, pbSrcData, (unsigned long *)&nSrcLen);
	if(!r)
	{
		return -3;
	}

	nDestLen = nSrcLen;
	memcpy(pbDestData, pbSrcData, nDestLen);

	return 0;
}
/**********************************************************************
+函數(shù)名稱: CRYPTAPI_Encrypt()
+輸入?yún)?shù):  pbPWD 對(duì)稱加密的口令
+			nPWDLen 口令長(zhǎng)度
+			pbSrcData 待加密數(shù)據(jù)
+			nSrcLen  待加密數(shù)據(jù)長(zhǎng)度
+			pbDestData 加密后數(shù)據(jù)
+			nDestLen 加密后數(shù)據(jù)長(zhǎng)度
+輸出參數(shù): pbDestData 加密后數(shù)據(jù)
+			nDestLen 加密后數(shù)據(jù)長(zhǎng)度
+返回值:
+其他說明:使用本地的對(duì)稱算法來加密數(shù)據(jù)(采用口令方式,如果要換對(duì)稱加密算法只需要換個(gè)宏定義就可以拉 默認(rèn)DES算法)
***********************************************************************/

int CKeyOperation::CRYPTAPI_Encrypt(unsigned char *pbPWD, int nPWDLen, 
									unsigned char *pbSrcData, int nSrcLen,
									unsigned char *pbDestData, int &nDestLen)
{
	//刪除CSP中存在的容器
	CryptAcquireContext(&m_hProv, "DES", MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_DELETEKEYSET);

	if(!CryptAcquireContext(&m_hProv, "DES", MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET))
		return -1;
	
	HCRYPTHASH hHash;
	HCRYPTKEY hEncryptKey;
	//創(chuàng)建HASH對(duì)象
	if(!CryptCreateHash(m_hProv, CALG_SHA, 0, 0, &hHash))
	{
		if(m_hProv) 
			CryptReleaseContext(m_hProv, 0);
		return -2;
	}
	
	//HASH 口令
	if(!CryptHashData(hHash, pbPWD, nPWDLen, 0))
		{
			if(m_hProv) 
				CryptReleaseContext(m_hProv, 0);
			if (hHash)
				CryptDestroyKey(hHash);
			return -3;
		}
	//導(dǎo)出對(duì)稱加密密鑰
	if(!CryptDeriveKey(m_hProv, CALG_DES, hHash, CRYPT_CREATE_SALT, &hEncryptKey))
	{
		if(m_hProv) 
			CryptReleaseContext(m_hProv, 0);
		if (hHash)
			CryptDestroyKey(hHash);
		return -4;
	}

	CryptDestroyKey(hHash);
	hHash = 0;

	//對(duì)稱加密
	int r = CryptEncrypt(hEncryptKey, NULL, TRUE, NULL, pbSrcData, (unsigned long *)&nSrcLen, (unsigned long)nSrcLen+256);
	if(!r)
	{
        if(m_hProv) 
			CryptReleaseContext(m_hProv, 0);
		if (hEncryptKey)
			CryptDestroyKey(hEncryptKey); 
		return -5;	
	}

	nDestLen = nSrcLen;
	memcpy(pbDestData, pbSrcData, nDestLen);

	if(hEncryptKey)
		CryptDestroyKey(hEncryptKey);
	if(m_hProv)
		CryptReleaseContext(m_hProv, 0);
	
	return 0 ;
}

/**********************************************************************
+函數(shù)名稱: CRYPTAPI_Decrypt()
+輸入?yún)?shù):  pbPWD 對(duì)稱加密的口令
+			nPWDLen 口令長(zhǎng)度
+			pbSrcData 待解密數(shù)據(jù)
+			nSrcLen  待解密數(shù)據(jù)長(zhǎng)度
+			pbDestData 解密后數(shù)據(jù)
+			nDestLen 解密后數(shù)據(jù)長(zhǎng)度
+輸出參數(shù): pbDestData 解密后數(shù)據(jù)
+			nDestLen 解密后數(shù)據(jù)長(zhǎng)度
+返回值:
+其他說明:使用本地的對(duì)稱算法來解密數(shù)據(jù)(采用口令方式,如果要換對(duì)稱解密算法只需要換個(gè)宏定義就可以拉 默認(rèn)DES算法)
***********************************************************************/
int CKeyOperation::CRYPTAPI_Decrypt(unsigned char *pbPWD, int nPWDLen, unsigned char *pbSrcData, int nSrcLen, unsigned char *pbDestData, int &nDestLen)
{
	int r;
	
	if(!CryptAcquireContext(&m_hProv, "DES", MS_ENHANCED_PROV, PROV_RSA_FULL, 0))
		return -1;
	
	HCRYPTHASH hHash;
	HCRYPTKEY hDecryptKey;
	//創(chuàng)建HASH對(duì)象
	if(!CryptCreateHash(m_hProv, CALG_SHA, 0, 0, &hHash))
	{
		if(m_hProv) 
			CryptReleaseContext(m_hProv, 0);
		return -2;
	}
	
	//HASH 口令
	if(!CryptHashData(hHash, pbPWD, nPWDLen, 0))
	{
		if(m_hProv) 
			CryptReleaseContext(m_hProv, 0);
		if (hHash)
			CryptDestroyKey(hHash);
		return -3;
	}
	//導(dǎo)出對(duì)稱加密密鑰
	if(!CryptDeriveKey(m_hProv, CALG_DES, hHash, CRYPT_CREATE_SALT, &hDecryptKey))
	{
		if(m_hProv) 
			CryptReleaseContext(m_hProv, 0);
		if (hHash)
			CryptDestroyKey(hHash);
		return -4;
	}
	
	CryptDestroyKey(hHash);
	hHash = 0;
	
	//解密數(shù)據(jù)
	r = CryptDecrypt(hDecryptKey, NULL, TRUE, NULL, pbSrcData, (unsigned long *)&nSrcLen);
	if(!r)
	{
		if(m_hProv) 
			CryptReleaseContext(m_hProv, 0);
		if(hDecryptKey)
			CryptDestroyKey(hDecryptKey);
		return -5;
	}
	
	nDestLen = nSrcLen;
	memcpy(pbDestData, pbSrcData, nDestLen);
	
	if(hDecryptKey)
		CryptDestroyKey(hDecryptKey);
	if(m_hProv) 
		CryptReleaseContext(m_hProv, 0);
	
	return 0;
}

/**********************************************************************
+函數(shù)名稱: CRYPTAPI_RSASign()
+輸入?yún)?shù):  pbSrcData 待簽名數(shù)據(jù)
+			nSrcLen 待簽名數(shù)據(jù)長(zhǎng)度
+			pbDestData 簽名后數(shù)據(jù)
+			nDestLen 簽名后數(shù)據(jù)長(zhǎng)度
+輸出參數(shù): pbDestData 簽名后數(shù)據(jù)
+			nDestLen 簽名后數(shù)據(jù)長(zhǎng)度
+返回值:
+其他說明: 簽名HASH后的數(shù)據(jù)
***********************************************************************/
int CKeyOperation::CRYPTAPI_RSASign(unsigned char *pbSrcData, int nSrcLen, 
									unsigned char *pbDestData, int *pnDestLen)
{
	
	CryptAcquireContext(&m_hProv, "ASYSIGN", MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_DELETEKEYSET);
	if(!CryptAcquireContext(&m_hProv, "ASYSIGN", MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET))
		return -1;

	int r = CryptGenKey(m_hProv, AT_SIGNATURE, CRYPT_EXPORTABLE, &m_hKey);
	if(!r)
	{
		CryptAcquireContext(&m_hProv, "ASYSIGN", MS_ENHANCED_PROV, 
								PROV_RSA_FULL, CRYPT_DELETEKEYSET);
		if(m_hProv)
			CryptReleaseContext(m_hProv, 0);
		return -2;
	}

	HCRYPTHASH hHash;
	if(!CryptCreateHash(m_hProv, CALG_SHA, 0, 0, &hHash))  //創(chuàng)建HASH對(duì)象
	{
		if(m_hProv)
			CryptReleaseContext(m_hProv, 0);
		return -3;
	}

	if(!CryptHashData(hHash, pbSrcData, (unsigned long)nSrcLen, 0))//hash數(shù)據(jù)
	{
		if(m_hProv)
			CryptReleaseContext(m_hProv, 0);
		if(hHash)
			CryptDestroyHash(hHash);
		return -3;
	}
	
	//獲得簽名數(shù)據(jù)長(zhǎng)度
	if(!CryptSignHash(hHash, AT_SIGNATURE, NULL, 0, NULL, (unsigned long *)pnDestLen))
	{
		if(m_hProv)
			CryptReleaseContext(m_hProv, 0);
		if(hHash)
			CryptDestroyHash(hHash);
		return -4;
	}

	//簽名HASH數(shù)據(jù)
	if(!CryptSignHash(hHash, AT_SIGNATURE, NULL, 0, pbDestData, (unsigned long *)pnDestLen))
	{
		if(m_hProv)
			CryptReleaseContext(m_hProv, 0);
		if(hHash)
			CryptDestroyHash(hHash);
		return -5;
	}

	if(hHash)
		CryptDestroyHash(hHash);
	if(m_hProv)
			CryptReleaseContext(m_hProv, 0);

	return 0;
}

/**********************************************************************
+函數(shù)名稱: CRYPTAPI_RSAVerify()
+輸入?yún)?shù):  pbSrcData 待驗(yàn)證數(shù)據(jù)
+			nSrcLen 待驗(yàn)證數(shù)據(jù)長(zhǎng)度
+			pbDestData 簽名數(shù)據(jù)
+			nDestLen 簽名數(shù)據(jù)長(zhǎng)度
+輸出參數(shù): pbDestData 簽名后數(shù)據(jù)
+			nDestLen 簽名數(shù)據(jù)長(zhǎng)度
+返回值:
+其他說明: 驗(yàn)證經(jīng)過簽名HASH數(shù)據(jù)
***********************************************************************/

int CKeyOperation::CRYPTAPI_RSAVerify(unsigned char *pbSrcData, int nSrcLen, 
											unsigned char *pbDestData, int nDestLen)
{
	if(!CryptAcquireContext(&m_hProv, "ASYSIGN", MS_ENHANCED_PROV, PROV_RSA_FULL, 0))
		return -1;
	
	if(!CryptGetUserKey(m_hProv, AT_SIGNATURE, &m_hKey))
	{
		if(m_hProv)
			CryptReleaseContext(m_hProv, 0);
		return -2;
	}

	HCRYPTHASH hHash;
	
	//創(chuàng)建HASH對(duì)象
	if(!CryptCreateHash(m_hProv, CALG_SHA, 0, 0, &hHash))
	{
		if(m_hProv)
			CryptReleaseContext(m_hProv, 0);
		return -2;
	}

	//HASH待驗(yàn)證數(shù)據(jù)
	if(!CryptHashData(hHash, pbSrcData, nSrcLen, 0))
	{
		if(m_hProv)
			CryptReleaseContext(m_hProv, 0);
		if(hHash)
			CryptDestroyHash(hHash);
		return -3;
	}
	
	//驗(yàn)證簽名數(shù)據(jù)
	if(!CryptVerifySignature(hHash, pbDestData, nDestLen, m_hKey, NULL, 0))
	{
		if(m_hProv)
			CryptReleaseContext(m_hProv, 0);
		if(hHash)
			CryptDestroyHash(hHash);
		return -4;
	}

	if(hHash)
		CryptDestroyHash(hHash);
	if(m_hProv)
		CryptReleaseContext(m_hProv, 0);

	return 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频一区二区三区四区| 欧美日韩在线三区| 亚洲第一搞黄网站| 日本一区免费视频| 91精选在线观看| 97久久超碰国产精品| 免费成人性网站| 亚洲丶国产丶欧美一区二区三区| 欧美韩国日本一区| 欧美日韩国产123区| 97超碰欧美中文字幕| 美国三级日本三级久久99| 中文成人综合网| 精品少妇一区二区三区日产乱码 | 成人aa视频在线观看| 日韩黄色在线观看| 亚洲综合区在线| 国产午夜精品久久久久久久| 日韩色视频在线观看| 欧美综合在线视频| 色婷婷激情综合| 大美女一区二区三区| 国模娜娜一区二区三区| 日韩中文字幕区一区有砖一区| 99国产精品一区| 丁香天五香天堂综合| 六月丁香婷婷久久| 日韩精品视频网| 日本aⅴ亚洲精品中文乱码| 亚洲日本在线看| 中文字幕在线观看不卡视频| 久久久久久久久伊人| 欧美v日韩v国产v| 精品久久久久香蕉网| 日韩欧美国产电影| 精品国产区一区| 欧美xxxx老人做受| 久久这里只有精品视频网| 日韩免费视频一区| 亚洲精品在线观看网站| 2021国产精品久久精品| 久久久久国产精品免费免费搜索| 91香蕉视频污| 91国内精品野花午夜精品| 成人av中文字幕| 91小视频免费观看| 欧美性色黄大片| 91精品国产免费| 精品国产成人在线影院 | 欧美欧美欧美欧美首页| 在线观看av不卡| 欧美日韩一区二区三区四区 | 亚洲成a天堂v人片| 三级在线观看一区二区| 蜜臀久久久99精品久久久久久| 精品91自产拍在线观看一区| 日韩免费福利电影在线观看| 精品国精品国产| 中文欧美字幕免费| 一二三区精品视频| 美女视频网站久久| 国产乱码精品一品二品| 成人97人人超碰人人99| 欧美在线你懂得| 2019国产精品| 亚洲视频免费观看| 日韩精品一级中文字幕精品视频免费观看| 久久色.com| 亚洲欧美综合另类在线卡通| 亚洲第一主播视频| 国产一区不卡在线| 欧洲一区在线观看| 欧美大片在线观看一区| 国产精品久久久久影院| 亚洲大片在线观看| 久久精品国产99国产| 成人18精品视频| 欧美精品丝袜中出| 国产精品国产三级国产有无不卡 | 91视频com| 日韩三级中文字幕| 国产精品不卡视频| 日韩av高清在线观看| 成人动漫视频在线| 欧美色偷偷大香| 久久精品日产第一区二区三区高清版| 日韩精品自拍偷拍| 国产精品白丝在线| 奇米一区二区三区av| 成人h动漫精品一区二| 在线观看91精品国产麻豆| 国产欧美一区在线| 日韩av高清在线观看| 91视频在线看| 国产婷婷色一区二区三区| 五月激情综合色| 91理论电影在线观看| 精品国产乱子伦一区| 亚洲成人av电影在线| 成a人片亚洲日本久久| 日韩免费成人网| 亚洲成人一区二区| 99精品欧美一区二区三区小说| 99精品久久99久久久久| 2021国产精品久久精品 | 洋洋av久久久久久久一区| 国产在线精品视频| 在线播放91灌醉迷j高跟美女| 7777精品伊人久久久大香线蕉超级流畅 | 欧美日韩在线精品一区二区三区激情 | 亚洲精品一区二区三区在线观看| 67194成人在线观看| 亚洲激情一二三区| 国产精品 日产精品 欧美精品| 国产成+人+日韩+欧美+亚洲| 欧美日韩精品一区视频| 亚洲三级在线免费| 成人黄页在线观看| 久久欧美一区二区| 麻豆精品久久久| 欧美一区二区三区色| 亚洲电影你懂得| 色欧美88888久久久久久影院| 欧美另类一区二区三区| 亚洲精品一二三四区| 成人精品鲁一区一区二区| 精品久久国产老人久久综合| 免费成人在线影院| 日韩免费观看高清完整版| 日本一不卡视频| 日韩一区二区在线免费观看| 亚洲成av人综合在线观看| 欧美巨大另类极品videosbest | 日韩美女在线视频 | 国产亚洲一区二区三区四区| 黑人精品欧美一区二区蜜桃 | 色婷婷综合久色| 综合精品久久久| 91香蕉视频污| 一区二区三区蜜桃| 精品视频一区 二区 三区| 亚洲一区中文日韩| 欧美色综合网站| 亚洲丰满少妇videoshd| 欧美视频在线观看一区二区| 午夜精品久久一牛影视| 日韩一区二区在线看片| 国内精品嫩模私拍在线| 久久精品视频免费观看| 成年人网站91| 亚洲一级二级在线| 91麻豆精品国产自产在线观看一区| 欧美激情一区二区三区蜜桃视频| 亚洲自拍都市欧美小说| 91麻豆精品国产91久久久久 | 欧美在线视频全部完| 日韩主播视频在线| 精品人在线二区三区| 久久不见久久见免费视频1| 国产蜜臀97一区二区三区| 99精品在线观看视频| 亚洲成人免费在线| 久久美女高清视频| 在线一区二区三区四区五区| 五月激情综合婷婷| 久久久精品国产免大香伊 | 视频一区免费在线观看| 欧美大片日本大片免费观看| 国产一区二区影院| 亚洲欧美日韩中文字幕一区二区三区| 国产乱子轮精品视频| 中文字幕在线观看一区| 欧美日韩精品一区二区在线播放| 中文字幕一区二区在线播放 | 91国偷自产一区二区三区观看 | 亚洲777理论| 精品国产乱码久久久久久1区2区| 性做久久久久久免费观看欧美| 99久久免费视频.com| 石原莉奈在线亚洲二区| 久久综合久久鬼色中文字| 91亚洲国产成人精品一区二区三| 国产精品久久精品日日| 337p亚洲精品色噜噜| 成人免费观看av| 亚洲成人免费影院| 国产精品久久久爽爽爽麻豆色哟哟 | 国产精品一区二区黑丝| 一区二区三区四区中文字幕| 精品噜噜噜噜久久久久久久久试看 | 成人午夜av电影| 亚洲精品乱码久久久久久久久| 成人动漫av在线| 美国十次综合导航| 中文字幕亚洲欧美在线不卡| 欧美不卡一二三| 欧美男男青年gay1069videost| 亚洲成人免费观看| 亚洲欧洲av另类| 久久久99精品免费观看|