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

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

用java語言進行RSA加解密

2019-11-14 10:32: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
日韩在线观看免费高清完整版| 欧美猛交ⅹxxx乱大交视频| 久久亚洲一区二区三区四区五区高| 日韩欧美有码在线| 国产精品日韩专区| 中文字幕日韩有码| 日韩精品在线观看一区二区| 国产精自产拍久久久久久蜜| 中日韩午夜理伦电影免费| 欧美精品在线极品| 欧美影院成年免费版| 精品美女国产在线| 欧美日韩精品在线播放| 国产盗摄xxxx视频xxx69| 一区二区三区视频在线| 久久综合色88| 精品国产成人在线| 中文字幕av一区二区三区谷原希美| 精品国产一区二区三区久久狼5月| 亚洲一区二区三| 国产精品久久久久久久久久久久久久| 国产98色在线| 岛国视频午夜一区免费在线观看| 欧美日韩成人在线播放| 欧美猛交ⅹxxx乱大交视频| 欧美日韩国产限制| 中文字幕亚洲一区二区三区五十路| 国产精品视频网址| 国产精品444| 中文字幕在线看视频国产欧美在线看完整| 中文字幕不卡av| 亚洲综合色激情五月| 欧美日韩国产综合视频在线观看中文| 不卡av电影院| 91经典在线视频| 欧美激情中文字幕乱码免费| 热re91久久精品国99热蜜臀| 韩日欧美一区二区| 久久久久久久久久久91| 91精品视频观看| 亚洲乱亚洲乱妇无码| 在线观看日韩视频| 亚洲视频在线视频| 国产精品一区二区三区久久久| 久久婷婷国产麻豆91天堂| 日韩精品中文字幕在线观看| 久久久久日韩精品久久久男男| 午夜精品一区二区三区视频免费看| 欧美大学生性色视频| 国产精品无码专区在线观看| 久久中文字幕在线| 精品国产一区二区三区久久狼黑人| 国产一区二区三区18| 欧美最猛性xxxxx(亚洲精品)| 日韩美女免费视频| 中文字幕不卡在线视频极品| 国产视频自拍一区| 亚洲最大成人网色| 亚洲国产成人在线视频| 欧美亚洲一区在线| 国产精品视频久久久| 国产男女猛烈无遮挡91| 国产一区二区在线免费| 日本久久久久久久久| 中文字幕国产精品久久| 亚洲精品720p| 日韩欧美aaa| 亚洲色图校园春色| 97精品国产91久久久久久| 91精品国产91久久久久| 亚洲欧美综合v| 欧美激情xxxx性bbbb| 亚洲成人精品视频| 国产日韩欧美综合| 日韩有码在线观看| 欧美日韩成人在线视频| 国产美女精品视频| 国内精品久久久久久久久| 国内揄拍国内精品少妇国语| 成人激情在线观看| 三级精品视频久久久久| 国产精品免费一区| 欧美日韩国产123| 久久免费视频观看| 国产精品女视频| 日韩视频在线一区| 奇米一区二区三区四区久久| 伊人久久综合97精品| 成人av电影天堂| 免费av一区二区| 性色av一区二区三区红粉影视| 久久99精品久久久久久琪琪| 91精品综合久久久久久五月天| 亚洲精品720p| 精品视频在线导航| 在线精品视频视频中文字幕| 国产精品黄页免费高清在线观看| 91免费国产视频| 亚洲综合在线小说| 国产精自产拍久久久久久蜜| 亚洲人成自拍网站| 日韩av日韩在线观看| 日韩免费黄色av| 欧美激情喷水视频| 国产97色在线|日韩| 久久久亚洲欧洲日产国码aⅴ| 一本色道久久综合狠狠躁篇的优点| 成人性生交大片免费看小说| 亚洲新中文字幕| 国产精品av免费在线观看| 欧美午夜久久久| 国产激情视频一区| 庆余年2免费日韩剧观看大牛| 欧美另类极品videosbestfree| 国产免费一区视频观看免费| 性欧美在线看片a免费观看| 欧美日韩国产成人| 亚洲图片在区色| 6080yy精品一区二区三区| 日韩电影在线观看永久视频免费网站| 日韩69视频在线观看| 岛国av午夜精品| 第一福利永久视频精品| 国内精品一区二区三区| 久久免费少妇高潮久久精品99| 日韩经典一区二区三区| 中文字幕亚洲欧美| 久久人人爽人人爽爽久久| 久久久久成人精品| 久久久爽爽爽美女图片| 大桥未久av一区二区三区| 福利二区91精品bt7086| 国产精品91久久久久久| 日韩电影免费在线观看中文字幕| 日韩精品中文字幕在线| 欧美影院在线播放| 久久人人看视频| 国产在线高清精品| 欧美亚洲国产视频| 国产亚洲激情视频在线| 日韩欧美亚洲范冰冰与中字| 亚洲午夜未删减在线观看| 国产精品福利片| 久久久久久久影视| 日韩欧美在线视频日韩欧美在线视频| 欧美性猛交xxxx乱大交极品| 精品国产乱码久久久久久虫虫漫画| 国产精品99久久久久久久久| 91精品国产777在线观看| 午夜精品久久久99热福利| 亚洲电影在线观看| 川上优av一区二区线观看| 成人444kkkk在线观看| 久久99热这里只有精品国产| 久久亚洲国产精品| 亚洲精品美女在线观看播放| 一个人看的www欧美| 国产精品福利小视频| 久久久亚洲网站| 日韩黄色av网站| 夜夜躁日日躁狠狠久久88av| 欧美黑人巨大xxx极品| 精品国产一区二区在线| 欧美黄色性视频|