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

首頁 > 學院 > 開發設計 > 正文

用java語言進行RSA加解密

2019-11-14 11:03:38
字體:
來源:轉載
供稿:網友

第一種情況:生成密鑰對,并進行加解密測試。需要兩個類Base64Utils及MyRSA,如下

package rsatest;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.util.Base64;/** * Created by Administrator on 2017/1/13. */public class Base64Utils {    /**     * 文件讀取緩沖區大小     */    PRivate static final int CACHE_SIZE = 1024;    /**     * <p>     * BASE64字符串解碼為二進制數據     * </p>     *     * @param base64     * @return     * @throws Exception     */    public static byte[] decode(String base64) throws Exception {    	Base64.getDecoder().decode(base64.getBytes());        return Base64.getDecoder().decode(base64.getBytes());    }    /**     * <p>     * 二進制數據編碼為BASE64字符串     * </p>     *     * @param bytes     * @return     * @throws Exception     */    public static String encode(byte[] bytes) throws Exception {        return new String(Base64.getEncoder().encode(bytes));    }    /**     * <p>     * 將文件編碼為BASE64字符串     * </p>     * <p>     * 大文件慎用,可能會導致內存溢出     * </p>     *     * @param filePath 文件絕對路徑     * @return     * @throws Exception     */    public static String encodeFile(String filePath) throws Exception {        byte[] bytes = fileToByte(filePath);        return encode(bytes);    }    /**     * <p>     * BASE64字符串轉回文件     * </p>     *     * @param filePath 文件絕對路徑     * @param base64   編碼字符串     * @throws Exception     */    public static void decodeToFile(String filePath, String base64) throws Exception {        byte[] bytes = decode(base64);        byteArrayToFile(bytes, filePath);    }    /**     * <p>     * 文件轉換為二進制數組     * </p>     *     * @param filePath 文件路徑     * @return     * @throws Exception     */    public static byte[] fileToByte(String filePath) throws Exception {        byte[] data = new byte[0];        File file = new File(filePath);        if (file.exists()) {            FileInputStream in = new FileInputStream(file);            ByteArrayOutputStream out = new ByteArrayOutputStream(2048);            byte[] cache = new byte[CACHE_SIZE];            int nRead = 0;            while ((nRead = in.read(cache)) != -1) {                out.write(cache, 0, nRead);                out.flush();            }            out.close();            in.close();            data = out.toByteArray();        }        return data;    }    /**     * <p>     * 二進制數據寫文件     * </p>     *     * @param bytes    二進制數據     * @param filePath 文件生成目錄     */    public static void byteArrayToFile(byte[] bytes, String filePath) throws Exception {        InputStream in = new ByteArrayInputStream(bytes);        File destFile = new File(filePath);        if (!destFile.getParentFile().exists()) {            destFile.getParentFile().mkdirs();        }        destFile.createNewFile();        OutputStream out = new FileOutputStream(destFile);        byte[] cache = new byte[CACHE_SIZE];        int nRead = 0;        while ((nRead = in.read(cache)) != -1) {            out.write(cache, 0, nRead);            out.flush();        }        out.close();        in.close();    }}
package rsatest;import java.security.InvalidKeyException;import java.security.Key;import java.security.KeyFactory;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.NoSuchAlgorithmException;import java.security.PrivateKey;import java.security.PublicKey;import java.security.interfaces.RSAPrivateKey;import java.security.interfaces.RSAPublicKey;import java.security.spec.InvalidKeySpecException;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.X509EncodedKeySpec;import java.util.Base64;import java.util.HashMap;import java.util.Map;import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.NoSuchPaddingException;public class MyRSA {	public static final String KEY_ALGORITHM = "RSA";		public static final String CIPHER_ALGORITHM = "RSA/ECB/PKCS1Padding";	public static final String PUBLIC_KEY = "publicKey";	public static final String PRIVATE_KEY = "privateKey";	/** RSA密鑰長度必須是64的倍數,在512~65536之間。默認是1024 */	public static final int KEY_SIZE = 2048;	public static final String PLAIN_TEXT = "你好,2017";		public static void main(String[] args) throws Exception {		//生成密鑰對		Map<String, byte[]> keyMap = generateKeyBytes();	    		PublicKey publicKey = restorePublicKey(keyMap.get(PUBLIC_KEY));		PrivateKey privateKey = restorePrivateKey(keyMap.get(PRIVATE_KEY));		// 用公鑰加密		byte[] encodedText = RSAEncode(publicKey, PLAIN_TEXT.getBytes());				System.out.println("加密結果: " + Base64Utils.encode(encodedText));				//用私鑰解密		System.out.println("解密結果: " + RSADecode(privateKey, encodedText));	}	/**	 * 生成密鑰對。注意這里是生成密鑰對KeyPair,再由密鑰對獲取公私鑰	 *	 * @return	 */	public static Map<String, byte[]> generateKeyBytes() {		try {			KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KEY_ALGORITHM);			keyPairGenerator.initialize(KEY_SIZE);			KeyPair keyPair = keyPairGenerator.generateKeyPair();			RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();			RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();			Map<String, byte[]> keyMap = new HashMap<String, byte[]>();			keyMap.put(PUBLIC_KEY, publicKey.getEncoded());			keyMap.put(PRIVATE_KEY, privateKey.getEncoded());			return keyMap;		} catch (NoSuchAlgorithmException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}		return null;	}	/**	 * 還原公鑰,X509EncodedKeySpec 用于構建公鑰的規范	 *	 * @param keyBytes	 * @return	 */	public static PublicKey restorePublicKey(byte[] keyBytes) {		X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(keyBytes);		try {			KeyFactory factory = KeyFactory.getInstance(KEY_ALGORITHM);			PublicKey publicKey = factory.generatePublic(x509EncodedKeySpec);			return publicKey;		} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}		return null;	}	/**	 * 還原私鑰,PKCS8EncodedKeySpec 用于構建私鑰的規范	 *	 * @param keyBytes	 * @return	 */	public static PrivateKey restorePrivateKey(byte[] keyBytes) {		PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(keyBytes);		try {			KeyFactory factory = KeyFactory.getInstance(KEY_ALGORITHM);			PrivateKey privateKey = factory.generatePrivate(pkcs8EncodedKeySpec);			return privateKey;		} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}		return null;	}	/**	 * 加密,三步走。	 *	 * @param key	 * @param plainText	 * @return	 */	public static byte[] RSAEncode(PublicKey key, byte[] plainText) {		try {			Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);			cipher.init(Cipher.ENCRYPT_MODE, key);			return cipher.doFinal(plainText);		} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException				| BadPaddingException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}		return null;	}	/**	 * 	 *	 * @param key	 * @param encodedText	 * @return	 */	public static String RSADecode(PrivateKey key, byte[] encodedText) {		try {			Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);			cipher.init(Cipher.DECRYPT_MODE, key);			return new String(cipher.doFinal(encodedText));		} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException				| BadPaddingException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}		return null;	}}通過上面兩個類可以進行測試。

第二種情況:在平時開發中,往往是用只需要用公鑰加密或者是用私鑰解密,公私鑰和密文是String類型的,下面測試一下用私鑰來解密一串密文。

package rsatest;import java.security.InvalidKeyException;import java.security.Key;import java.security.KeyFactory;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.NoSuchAlgorithmException;import java.security.PrivateKey;import java.security.PublicKey;import java.security.interfaces.RSAPrivateKey;import java.security.interfaces.RSAPublicKey;import java.security.spec.InvalidKeySpecException;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.X509EncodedKeySpec;import java.util.Base64;import java.util.HashMap;import java.util.Map;import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.NoSuchPaddingException;public class MyRSA {	public static final String KEY_ALGORITHM = "RSA";	public static final String CIPHER_ALGORITHM = "RSA/ECB/PKCS1Padding";	public static final String PUBLIC_KEY = "publicKey";	public static final String PRIVATE_KEY = "privateKey";	/** RSA密鑰長度必須是64的倍數,在512~65536之間。默認是1024 */	public static final int KEY_SIZE = 2048;	public static final String PLAIN_TEXT = "你好,2017";		    //以下是一對RSA公私鑰,result是一串用公鑰加密后的密文	private static String private_key_string = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC/"			+ "TFxb6tApaTQ+N6du3T+F0/NcPw0aR5YeGqUxL6p4wcx7WbKWmSqcCeWmtlqzidp5mPUp107coeSt45"			+ "TKYBAhDOh8D3CshoZiagrlL4lyPTZPM4UUSmt3jrVLI+NAjDwoCZE/EI6FBL4ATXAUqBjVA4Y2QmBF"			+ "sAtkTNbN67CYTDn4p6T47Cvi1zLhk0UZOrUSVAHnJqfT/xo6utyQWpUHhbVRSxTTcfSxf6CYnmYt0e"			+ "AE+tto5NTZt3LaNxokUKyhsTGt8vnQnfqhj0uPgOMAyWE9jHnD/rIkPEEIjdzG6kUgamffjjNC7+KR"			+ "sdc9Pdf8i0fEDkXwaXgzA3KVz3/5AgMBAAECggEBAK61AYCc0eGQCDtuPoa8n0AM0ywDFWdTy6DQut9"			+ "R5gGFFMfuonBxj/2T+F2qGunvU01MSVMeJRLQ8/VvbDrrQQ+8hzKOM1wNO/vzVuH66S8hAlGQ/tAKK"			+ "120QpROQUR5DpOOMU2ERHTtYM0L6/mhj5QzNManFh9u6OiAWIkV4GElX6QBlaIDHInjt5Fnlf6QOiZ"			+ "ZpJQdCsftgTZe8oNUf4TdeUIkez1RcOqMSo8WkaQFScMI6QgLTt4DJtdc+G5ZaVfB1egziBl2ApRbO"			+ "WdGgGPIR/fNy/11oMvMHCCr16ewYKyxjxFn2iHtTC5gbuzIXTuSJn2D/mlQCmHxdMoT2VECgYEA67D"			+ "9al4FjIUGfhVK6orpGXaezr6Xt7Nwy+OeTrX6tqpj8krC7jSjNz2iFZMZmbB5C+Tr7h2AnZNLj4H7V"			+ "E/IidyFksjlGxLVE3ZYeNaj2o3HslTcDKaEvyI+CO9a0vRj9d9aF33Ym828JL0CiLVaIB8iuvdXItF"			+ "S3Ni9KagXpHUCgYEAz8gfsH9uCwxB7uPALAdMAYnoP3TN618BWQm3RZS2atP2vvw5m6XvRnmsQc3C5"			+ "lr0a1VycWg8LqWO0w0CaspsnsBH5fjhkx3+koxWDTW/d25wo0MMlR5BpekQ9SdK7doRw62BZxoeavs"			+ "Q/lgpYA2pCSTNBi+999XdrND4ZjHfLPUCgYApKdI4n48siZcmsiVRbU1kyxjVVug8hzRuB6UAbjwJZ"			+ "xzpljERVVQkM7l5NyXDd9TMRQEHp1NtMeqCd9sjUIPfwAn8JuYMom9gZMzy3dnkM9rqxHNiKjsI/rw"			+ "C53rfWRuUN5wOekY4f+gaKoCky7ef4JA6QzSOuixUse3ntpnaeQKBgFVbpkEQqHlbaL6ly22K9dtv9"			+ "vwSlQGLfvc/+Y1ZIXNTbntZDKV3jouKMoy55cZSOTTa3m/eXVLgaoMjRd8y88LnxOGh07FnUgyMIFG"			+ "+8dAzi4xWYBXmXxu0WmYL5Uk/G6siXRWo8jQKvhluyFiQZA/AkYVoGYd10WJMWq9I76D9AoGBAOKfB"			+ "WmhYsfj3WikP3eDLJ0P7/xqivWCubaPaaUcoBv4ARNePUNJ9B3VZjs6sh0voxJH5cTTWqNbKZaLYMq"			+ "ZVn6tF9/0qIXIWtUsxLDzWGgf31304rplouFsapjforNQ45yHSaHfVRrUo4MUw77nV5X3Y0iUbVaHg" 			+ "F9Cer0IIoWc";	private static String public_key_string = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv0xcW+rQK"			+ "Wk0Pjenbt0/hdPzXD8NGkeWHhqlMS+qeMHMe1mylpkqnAnlprZas4naeZj1KddO3KHkreOUymAQIQzof"			+ "A9wrIaGYmoK5S+Jcj02TzOFFEprd461SyPjQIw8KAmRPxCOhQS+AE1wFKgY1QOGNkJgRbALZEzWzeuwm"			+ "Ew5+Kek+Owr4tcy4ZNFGTq1ElQB5yan0/8aOrrckFqVB4W1UUsU03H0sX+gmJ5mLdHgBPrbaOTU2bdy2"			+ "jcaJFCsobExrfL50J36oY9Lj4DjAMlhPYx5w/6yJDxBCI3cxupFIGpn344zQu/ikbHXPT3X/ItHxA5F"			+ "8Gl4MwNylc9/+QIDAQAB";	private static String result = "vszajgjdXNoK+bCr0khX0XXdXH4+SG4yksn2huNIOXGh1xQ9nxo9tyv2mJuBtoTeE9CW"			+ "0W/btNJ6clb7HAKRzlwsAOhHW1CzdMV6HIyGPR9IFyh3dJS0nUIPlUjyNWl6OL7v+zLGpXsfG/9Fqg4C"			+ "AlAtn+uM+sjcl+STzmeKg2IU4SqQdeFzPKZk3e36z3WIyDIWG6ef4wqZxW7yZKWUwtNMMIMMEc37umHW"			+ "4Oxwjkld/EVctOTITUuZ3OHyybiSXyk+scGh/LNCFI07zqCGgrc6JPaSeKKjAemsC10ShDO4l4nUSKsF"			+ "FQPC14nUqfh1d/qx3y15YPTQwM2BnAx8ZQ==";	public static void main(String[] args) throws Exception {				String str=decryptByPrivateKey(private_key_string, result);				System.out.println("---解密出來的明文是---="+str);	}	/**	 * 生成密鑰對。注意這里是生成密鑰對KeyPair,再由密鑰對獲取公私鑰	 *	 * @return	 */	public static Map<String, byte[]> generateKeyBytes() {		try {			KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KEY_ALGORITHM);			keyPairGenerator.initialize(KEY_SIZE);			KeyPair keyPair = keyPairGenerator.generateKeyPair();			RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();			RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();			Map<String, byte[]> keyMap = new HashMap<String, byte[]>();			keyMap.put(PUBLIC_KEY, publicKey.getEncoded());			keyMap.put(PRIVATE_KEY, privateKey.getEncoded());			return keyMap;		} catch (NoSuchAlgorithmException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}		return null;	}	/**	 * 還原公鑰,X509EncodedKeySpec 用于構建公鑰的規范	 *	 * @param keyBytes	 * @return	 */	public static PublicKey restorePublicKey(byte[] keyBytes) {		X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(keyBytes);		try {			KeyFactory factory = KeyFactory.getInstance(KEY_ALGORITHM);			PublicKey publicKey = factory.generatePublic(x509EncodedKeySpec);			return publicKey;		} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}		return null;	}	/**	 * 還原私鑰,PKCS8EncodedKeySpec 用于構建私鑰的規范	 *	 * @param keyBytes	 * @return	 */	public static PrivateKey restorePrivateKey(byte[] keyBytes) {		PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(keyBytes);		try {			KeyFactory factory = KeyFactory.getInstance(KEY_ALGORITHM);			PrivateKey privateKey = factory.generatePrivate(pkcs8EncodedKeySpec);			return privateKey;		} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}		return null;	}	/**	 * 加密,三步走。	 *	 * @param key	 * @param plainText	 * @return	 */	public static byte[] RSAEncode(PublicKey key, byte[] plainText) {		try {			Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);			cipher.init(Cipher.ENCRYPT_MODE, key);			return cipher.doFinal(plainText);		} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException				| BadPaddingException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}		return null;	}	/**	 * 	 *	 * @param key	 * @param encodedText	 * @return	 */	public static String RSADecode(PrivateKey key, byte[] encodedText) {		try {			Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);			cipher.init(Cipher.DECRYPT_MODE, key);			return new String(cipher.doFinal(encodedText));		} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException				| BadPaddingException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}		return null;	}	/**	 * 解密	 * 	 * @param cipherText	 *            密文	 * @param privateKey	 *            私鑰	 * @throws Exception	 *             異常	 */	private static String decryptByPrivateKey(String privateKey, String cipherText) {		byte[] keyBytes = new byte[0];		try {			keyBytes = Base64Utils.decode(privateKey);			PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);			KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);			PrivateKey privateK = keyFactory.generatePrivate(pkcs8KeySpec);				return RSADecode(privateK, Base64Utils.decode(cipherText));		} catch (Exception e) {			e.printStackTrace();						return "";					}	}}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩国产第一页| 国产成人免费av| 亚洲综合av影视| 亚洲国产精品人久久电影| 亚洲色图欧美制服丝袜另类第一页| 欧美激情一区二区三区成人| 亚洲精品一区av在线播放| 日韩av在线网页| 国产女人精品视频| 亚洲欧美日韩网| 国产精品成人av在线| 久久精品国产成人| 国产精品一区二区av影院萌芽| 午夜欧美不卡精品aaaaa| 2018中文字幕一区二区三区| 亚洲欧美一区二区三区情侣bbw| 91国在线精品国内播放| 国产成人+综合亚洲+天堂| 国产精品日韩在线| 久久精品视频在线播放| 国产日韩精品在线观看| 国产精品私拍pans大尺度在线| 亚洲精品久久久久久下一站| 国产精品久久在线观看| 欧美高清一级大片| 久久精品视频播放| 欧美激情视频在线观看| 97av视频在线| 国产精品中文在线| 91精品国产九九九久久久亚洲| 久久久久久久久久久国产| 热久久免费视频精品| 国产成人在线播放| 国产精品久久久久久影视| 日韩欧美国产成人| 538国产精品一区二区免费视频| 日韩国产在线播放| 国产精品看片资源| 啊v视频在线一区二区三区| 国产亚洲精品综合一区91| 亚洲欧洲日本专区| 国产精品成人播放| 欧美电影免费在线观看| 韩曰欧美视频免费观看| 久久久免费在线观看| 国产在线不卡精品| 亚洲欧美日韩区| 欧美高清在线视频观看不卡| 欧美激情成人在线视频| 色妞在线综合亚洲欧美| 精品在线观看国产| 亚洲国产精品va在线看黑人| 精品五月天久久| 国产精品aaaa| 亚洲精品理论电影| 日韩免费不卡av| 91精品国产91久久久久| 久久久久久久电影一区| 精品国产91乱高清在线观看| 欧美专区国产专区| 国产精品久久久久久一区二区| 懂色av中文一区二区三区天美| 国产情人节一区| 精品中文字幕在线2019| 欧美中文字幕在线播放| 久久久之久亚州精品露出| 亚洲国语精品自产拍在线观看| 久久国产精品久久国产精品| 亚洲欧美在线x视频| 精品亚洲国产成av人片传媒| 国产成人高潮免费观看精品| 成人性生交大片免费看小说| 久久久久99精品久久久久| 欧美老女人www| 精品国产乱码久久久久酒店| 亚洲一区中文字幕在线观看| 最近中文字幕mv在线一区二区三区四区| 激情久久av一区av二区av三区| 中文字幕久热精品在线视频| 欧美视频国产精品| 久久av资源网站| 国产精品女人网站| 亚洲女人初尝黑人巨大| 国产午夜精品免费一区二区三区| 九九久久综合网站| 91亚洲va在线va天堂va国| 尤物yw午夜国产精品视频明星| 一色桃子一区二区| 欧美性猛交xxxx乱大交极品| 亚洲www在线观看| 亚洲二区中文字幕| 国产精品免费一区二区三区都可以| 91国产美女在线观看| 国产亚洲xxx| 国产欧洲精品视频| 日本午夜人人精品| www.国产一区| 国产精品亚洲网站| 一夜七次郎国产精品亚洲| 久久激情视频免费观看| 欧美一级黑人aaaaaaa做受| 日韩免费视频在线观看| 日本不卡视频在线播放| 欧美性极品xxxx做受| 亚洲精品v欧美精品v日韩精品| 中文字幕亚洲激情| 91在线视频导航| 在线日韩日本国产亚洲| 国产精品久久久久久久久久久不卡| 国产午夜精品免费一区二区三区| 欧美日韩国产综合新一区| 亚洲天堂av在线免费观看| 国产精品视频资源| 精品无人区乱码1区2区3区在线| 亚洲欧美日韩一区二区在线| 亚洲国产精品999| 欧美日韩加勒比精品一区| 亚洲最大成人在线| 免费91麻豆精品国产自产在线观看| 国产日韩欧美夫妻视频在线观看| 精品成人69xx.xyz| 亚洲精品电影网在线观看| 午夜精品福利在线观看| 亚洲一区二区三区视频播放| 久久久国产精品免费| 51色欧美片视频在线观看| 亚洲一区免费网站| 91丨九色丨国产在线| 最好看的2019的中文字幕视频| 中文国产亚洲喷潮| 欧美日韩中文在线| 国产热re99久久6国产精品| 国产精品视频永久免费播放| 精品国产999| 亚洲激情视频在线观看| 中文字幕不卡av| 精品人伦一区二区三区蜜桃免费| 日韩美女福利视频| 6080yy精品一区二区三区| 日韩精品极品视频免费观看| 亚洲乱码一区二区| 成人激情av在线| 在线播放国产一区中文字幕剧情欧美| 色av吧综合网| 亚洲欧洲自拍偷拍| 欧美猛男性生活免费| 欧美老少做受xxxx高潮| 日韩欧美极品在线观看| 精品自在线视频| 亚洲国产精品va在线看黑人动漫| 国产99视频精品免视看7| 2019中文字幕在线观看| 日本国产精品视频| 国产欧美日韩精品丝袜高跟鞋| 97免费中文视频在线观看| 日韩在线观看免费高清| 亚洲伦理中文字幕| 中文字幕国产日韩| 日韩人在线观看| 国产精品手机播放| 欧美激情免费看| 九九热精品视频| 中文字幕亚洲欧美| 亚洲影院色在线观看免费|