久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Java 實現RSA非對稱加密算法

瀏覽:68日期:2022-08-10 09:11:54
目錄公鑰與私鑰Java實現公鑰與私鑰

公鑰與私鑰是成對的,一般的,我們認為的是公鑰加密、私鑰解密、私鑰簽名、公鑰驗證,有人說成私鑰加密,公鑰解密時不對的。

公鑰與私鑰的生成有多種方式,可以通過程序生成(下文具體實現),可以通過openssl工具:

# 生成一個私鑰,推薦使用1024位的秘鑰,秘鑰以pem格式保存到-out參數指定的文件中,采用PKCS1格式 openssl genrsa -out rsa.pem 1024 # 生成與私鑰對應的公鑰,生成的是Subject Public Key,一般配合PKCS8格式私鑰使用 openssl rsa -in rsa.pem -pubout -out rsa.pub

RSA生成公鑰與私鑰一般有兩種格式:PKCS1和PKCS8,上面的命令生成的秘鑰是PKCS1格式的,而公鑰是Subject Public Key,一般配合PKCS8格式私鑰使用,所以就可能會涉及到PKCS1和PKCS8之間的轉換:

# PKCS1格式私鑰轉換為PKCS8格式私鑰,私鑰直接輸出到-out參數指定的文件中 openssl pkcs8 -topk8 -inform PEM -in rsa.pem -outform pem -nocrypt -out rsa_pkcs8.pem # PKCS8格式私鑰轉換為PKCS1格式私鑰,私鑰直接輸出到-out參數指定的文件中 openssl rsa -in rsa_pkcs8.pem -out rsa_pkcs1.pem # PKCS1格式公鑰轉換為PKCS8格式公鑰,轉換后的內容直接輸出 openssl rsa -pubin -in rsa.pub -RSAPublicKey_out # PKCS8格式公鑰轉換為PKCS1格式公鑰,轉換后的內容直接輸出 openssl rsa -RSAPublicKey_in -pubout -in rsa.pub

現實中,我們往往從pem、crt、pfx文件獲取公私和私鑰,crt、pfx的制作可以參考:簡單的制作ssl證書,并在nginx和IIS中使用,或者使用現成的:https://pan.baidu.com/s/1MJ5YmuZiLBnf-DfNR_6D7A (提取碼:c6tj),密碼都是:123456

Java實現

為簡化說明介紹,這里我直接封裝了一個工具類,因為要從pem、crt、pfx文件獲取公私和私鑰,因此引用了一個第三方包:BouncyCastle,可以直接在pom.xml中添加依賴:

<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.68</version> </dependency>

或者去mvn上下載:跳轉

簡單封裝的RsaUtil.java:

import java.io.FileInputStream;import java.io.FileReader;import java.io.FileWriter;import java.math.BigInteger;import java.security.KeyFactory;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.KeyStore;import java.security.PrivateKey;import java.security.PublicKey;import java.security.SecureRandom;import java.security.Security;import java.security.Signature;import java.security.cert.Certificate;import java.security.cert.CertificateFactory;import java.security.cert.X509Certificate;import java.security.interfaces.RSAPrivateKey;import java.security.interfaces.RSAPublicKey;import java.security.spec.KeySpec;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.RSAPrivateCrtKeySpec;import java.security.spec.RSAPublicKeySpec;import java.security.spec.X509EncodedKeySpec;import java.util.Enumeration;import javax.crypto.Cipher;import org.bouncycastle.asn1.ASN1Integer;import org.bouncycastle.asn1.ASN1Primitive;import org.bouncycastle.asn1.DLSequence;import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;import org.bouncycastle.asn1.x509.AlgorithmIdentifier;import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;import org.bouncycastle.jce.provider.BouncyCastleProvider;import org.bouncycastle.util.io.pem.PemObject;import org.bouncycastle.util.io.pem.PemReader;import org.bouncycastle.util.io.pem.PemWriter;public class RsaUtil { static {Security.addProvider(new BouncyCastleProvider()); } /** * 隨機生成密鑰對 * * @param usePKCS8 * 是否采用PKCS8填充模式 */ public static Object[] generateRsaKey(boolean usePKCS8) throws Exception {KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance('RSA', BouncyCastleProvider.PROVIDER_NAME);// 初始化keyPairGen.initialize(1024, new SecureRandom());// 生成一個密鑰對,保存在keyPair中KeyPair keyPair = keyPairGen.generateKeyPair();RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); // 得到私鑰RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); // 得到公鑰// 這兩個公私鑰是PKCS8格式的byte[] publicKeyBytes = publicKey.getEncoded();byte[] privateKeyBytes = privateKey.getEncoded();if (!usePKCS8) { // 將PSCK8格式公私鑰轉換為PKCS1格式 publicKeyBytes = pkcs8ToPkcs1(false, publicKeyBytes); privateKeyBytes = pkcs8ToPkcs1(true, privateKeyBytes);}return new Object[] { publicKeyBytes, privateKeyBytes }; } /** * 從Pem文件讀取密鑰對 * * @param reader * 輸入流 * @param pemFileName * pem文件 */ public static byte[] readFromPem(String pemFileName) throws Exception {PemReader pemReader = new PemReader(new FileReader(pemFileName));PemObject pemObject = pemReader.readPemObject();byte[] publicKey = pemObject.getContent();pemReader.close();return publicKey; } /** * 從Pem文件讀取密鑰 * * @param isPrivateKey * 是否是私鑰 * @param buffer * 字節 * @param pemFileName * pem文件 */ public static void writeToPem(byte[] buffer, boolean isPrivateKey, String pemFileName) throws Exception {PemObject pemObject = new PemObject(isPrivateKey ? 'RSA PRIVATE KEY' : 'RSA PUBLIC KEY', buffer);FileWriter fileWriter = new FileWriter(pemFileName);PemWriter pemWriter = new PemWriter(fileWriter);pemWriter.writeObject(pemObject);pemWriter.close(); } /** * 從crt文件讀取公鑰(pkcs8) * * @param crtFileName * crt文件 * @return 公鑰 */ public static byte[] readPublicKeyFromCrt(String crtFileName) throws Exception {CertificateFactory cf = CertificateFactory.getInstance('X.509');X509Certificate cert = (X509Certificate) cf.generateCertificate(new FileInputStream(crtFileName));PublicKey publicKey = cert.getPublicKey();return publicKey.getEncoded(); } /** * 從pfx文件讀取秘鑰對(pkcs8) * * @param pfxFileName * pfx文件 * @return 秘鑰對 */ public static Object[] readFromPfx(String pfxFileName, String password) throws Exception {KeyStore keystore = KeyStore.getInstance('PKCS12');char[] passwordChars = null;if (password == null || password.equals('')) { passwordChars = null;} else { passwordChars = password.toCharArray();}keystore.load(new FileInputStream(pfxFileName), passwordChars);Enumeration<String> enums = keystore.aliases();PrivateKey privateKey = null;Certificate certificate = null;while (enums.hasMoreElements()) { String alias = enums.nextElement(); System.out.println(alias); if (keystore.isKeyEntry(alias)) {privateKey = (PrivateKey) keystore.getKey(alias, passwordChars);certificate = keystore.getCertificate(alias); } if (privateKey != null && certificate != null)break;}if (privateKey == null || certificate == null) { throw new Exception('fail to read key from pfx');}PublicKey publicKey = certificate.getPublicKey();return new Object[] { publicKey.getEncoded(), privateKey.getEncoded() }; } /** * Pkcs8轉Pkcs1 * * @param isPrivateKey * 是否是私鑰轉換 * @param buffer * Pkcs1秘鑰 * @return Pkcs8秘鑰 * @throws Exception * 加密過程中的異常信息 */ public static byte[] pkcs8ToPkcs1(boolean isPrivateKey, byte[] buffer) throws Exception {if (isPrivateKey) { PrivateKeyInfo privateKeyInfo = PrivateKeyInfo.getInstance(buffer); return privateKeyInfo.parsePrivateKey().toASN1Primitive().getEncoded();} else { SubjectPublicKeyInfo subjectPublicKeyInfo = SubjectPublicKeyInfo.getInstance(buffer); return subjectPublicKeyInfo.parsePublicKey().toASN1Primitive().getEncoded();} } /** * Pkcs1轉Pkcs8 * * @param isPrivateKey * 是否是私鑰轉換 * @param buffer * Pkcs1秘鑰 * @return Pkcs8秘鑰 * @throws Exception * 加密過程中的異常信息 */ public static byte[] pkcs1ToPkcs8(boolean isPrivateKey, byte[] buffer) throws Exception {AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption);ASN1Primitive asn1Primitive = ASN1Primitive.fromByteArray(buffer);if (isPrivateKey) { PrivateKeyInfo privateKeyInfo = new PrivateKeyInfo(algorithmIdentifier, asn1Primitive); return privateKeyInfo.getEncoded();} else { SubjectPublicKeyInfo subjectPublicKeyInfo = new SubjectPublicKeyInfo(algorithmIdentifier, asn1Primitive); return subjectPublicKeyInfo.getEncoded();} } /** * RSA公鑰 * * @param usePKCS8 * 是否采用PKCS8填充模式 * @param publicKey * 公鑰 * @return 公鑰 * @throws Exception * 加密過程中的異常信息 */ public static RSAPublicKey generatePublicKey(boolean usePKCS8, byte[] publicKey) throws Exception {KeySpec keySpec;if (usePKCS8) { // PKCS8填充 keySpec = new X509EncodedKeySpec(publicKey);} else { // PKCS1填充 DLSequence sequence = (DLSequence) ASN1Primitive.fromByteArray(publicKey); BigInteger v1 = ((ASN1Integer) sequence.getObjectAt(0)).getValue(); BigInteger v2 = ((ASN1Integer) sequence.getObjectAt(1)).getValue(); keySpec = new RSAPublicKeySpec(v1, v2);}RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance('RSA', BouncyCastleProvider.PROVIDER_NAME).generatePublic(keySpec);return pubKey; } /** * RSA私鑰 * * @param usePKCS8 * 是否采用PKCS8填充模式 * @param privateKey * 私鑰 * @return 私鑰 * @throws Exception * 解密過程中的異常信息 */ public static RSAPrivateKey generatePrivateKey(boolean usePKCS8, byte[] privateKey) throws Exception {KeySpec keySpec;if (usePKCS8) { // PKCS8填充 keySpec = new PKCS8EncodedKeySpec(privateKey);} else { // PKCS1填充 DLSequence sequence = (DLSequence) ASN1Primitive.fromByteArray(privateKey); // BigInteger v1= ((ASN1Integer)sequence.getObjectAt(0)).getValue(); BigInteger v2 = ((ASN1Integer) sequence.getObjectAt(1)).getValue(); BigInteger v3 = ((ASN1Integer) sequence.getObjectAt(2)).getValue(); BigInteger v4 = ((ASN1Integer) sequence.getObjectAt(3)).getValue(); BigInteger v5 = ((ASN1Integer) sequence.getObjectAt(4)).getValue(); BigInteger v6 = ((ASN1Integer) sequence.getObjectAt(5)).getValue(); BigInteger v7 = ((ASN1Integer) sequence.getObjectAt(6)).getValue(); BigInteger v8 = ((ASN1Integer) sequence.getObjectAt(7)).getValue(); BigInteger v9 = ((ASN1Integer) sequence.getObjectAt(8)).getValue(); keySpec = new RSAPrivateCrtKeySpec(v2, v3, v4, v5, v6, v7, v8, v9);}RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance('RSA', BouncyCastleProvider.PROVIDER_NAME).generatePrivate(keySpec);return priKey; } /** * RSA公鑰加密 * * @param value * 加密字符串 * @param publicKey * 公鑰 * @return 密文 * @throws Exception * 加密過程中的異常信息 */ public static String rsaEncrypt(String value, RSAPublicKey publicKey) throws Exception {if (value == null || value.length() == 0) return '';// RSA加密Cipher cipher = Cipher.getInstance('RSA');cipher.init(Cipher.ENCRYPT_MODE, publicKey);byte[] buffer = cipher.doFinal(value.getBytes('utf-8'));// 使用hex格式輸出公鑰StringBuffer result = new StringBuffer();for (int i = 0; i < buffer.length; i++) { result.append(String.format('%02x', buffer[i]));}return result.toString(); } /** * RSA私鑰解密 * * @param value * 加密字符串 * @param privateKey * 私鑰 * @return 明文 * @throws Exception * 解密過程中的異常信息 */ public static String rsaDecrypt(String value, RSAPrivateKey privateKey) throws Exception {if (value == null || value.length() == 0) return '';byte[] buffer = new byte[value.length() / 2];for (int i = 0; i < buffer.length; i++) { buffer[i] = (byte) Integer.parseInt(value.substring(i * 2, i * 2 + 2), 16);}// RSA解密Cipher cipher = Cipher.getInstance('RSA');cipher.init(Cipher.DECRYPT_MODE, privateKey);buffer = cipher.doFinal(buffer);return new String(buffer, 'utf-8'); } /** * RSA簽名 * * @param value * 加密字符串 * @param privateKey * 私鑰 * @param halg * 加密算法,如MD5, SHA1, SHA256, SHA384, SHA512等 * @return 簽名 * @throws Exception * 簽名過程中的異常信息 */ public static String sign(String value, RSAPrivateKey privateKey, String halg) throws Exception {Signature s = Signature.getInstance(halg.toUpperCase().endsWith('WithRSA') ? halg : (halg + 'WithRSA'));s.initSign(privateKey);s.update(value.getBytes('utf-8'));byte[] buffer = s.sign();// 使用hex格式輸出公鑰StringBuffer result = new StringBuffer();for (int i = 0; i < buffer.length; i++) { result.append(String.format('%02x', buffer[i]));}return result.toString(); } /** * RSA簽名驗證 * * @param value * 加密字符串 * @param publicKey * 公鑰 * @param halg * 加密算法,如MD5, SHA1, SHA256, SHA384, SHA512等 * @return 簽名合法則返回true,否則返回false * @throws Exception * 驗證過程中的異常信息 */ public static boolean verify(String value, RSAPublicKey publicKey, String signature, String halg) throws Exception {Signature s = Signature.getInstance(halg.toUpperCase().endsWith('WithRSA') ? halg : (halg + 'WithRSA'));s.initVerify(publicKey);s.update(value.getBytes('utf-8'));byte[] buffer = new byte[signature.length() / 2];for (int i = 0; i < buffer.length; i++) { buffer[i] = (byte) Integer.parseInt(signature.substring(i * 2, i * 2 + 2), 16);}return s.verify(buffer); }}

 生成公鑰和私鑰:

// 生成公私鑰 Object[] rsaKey = RsaUtil.generateRsaKey(usePKCS8); //usePKCS8=true表示是否成PKCS8格式的公私秘鑰,否則乘車PKCS1格式的公私秘鑰 byte[] publicKey = (byte[]) rsaKey[0]; byte[] privateKey = (byte[]) rsaKey[1];

生成秘鑰后,需要保存,一般保存到pem文件中: 

// 保存到pem文件,filePath是保存目錄 RsaUtil.writeToPem(publicKey, false, filePath + 'rsa.pub'); RsaUtil.writeToPem(privateKey, true, filePath + 'rsa.pem');

 可以保存到pem文件中,當然也可以從pem文件中讀取了:

// 從Pem文件讀取公私鑰,filePath是文件目錄 byte[] publicKey = RsaUtil.readFromPem(filePath + 'rsa.pub'); byte[] privateKey = RsaUtil.readFromPem(filePath + 'rsa.pem');

還可以從crt證書中讀取公鑰,而crt文件不包含私鑰,因此需要單獨獲取私鑰: 

// 從crt文件讀取公鑰(crt文件中不包含私鑰),filePath是文件目錄 byte[] publicKey = RsaUtil.readPublicKeyFromCrt(filePath + 'demo.crt'); byte[] privateKey = RsaUtil.readFromPem(filePath + 'demo.key');

 pfx文件中包含了公鑰和私鑰,可以很方便就讀取到:

// 從pfx文件讀取公私鑰,filePath是文件目錄 Object[] rsaKey = RsaUtil.readFromPfx(filePath + 'demo.pfx', '123456'); byte[] publicKey = (byte[]) rsaKey[0]; byte[] privateKey = (byte[]) rsaKey[1];

有時候我們還可能需要進行秘鑰的轉換:

// Pkcs8格式公鑰轉換為Pkcs1格式公鑰 publicKey = RsaUtil.pkcs8ToPkcs1(false, publicKey); // Pkcs8格式私鑰轉換為Pkcs1格式私鑰 privateKey = RsaUtil.pkcs8ToPkcs1(true, privateKey); // Pkcs1格式公鑰轉換為Pkcs8格式公鑰 publicKey = RsaUtil.pkcs1ToPkcs8(false, publicKey); // Pkcs1格式私鑰轉換為Pkcs8格式私鑰 privateKey = RsaUtil.pkcs1ToPkcs8(true, privateKey);

有了公鑰和私鑰,接下就就能實現加密、解密、簽名、驗證簽名等操作了:

RSAPublicKey rsaPublicKey = RsaUtil.generatePublicKey(usePKCS8, publicKey); RSAPrivateKey rsaPrivateKey = RsaUtil.generatePrivateKey(usePKCS8, privateKey); String encryptText = RsaUtil.rsaEncrypt(text, rsaPublicKey); System.out.printf('【%s】經過【RSA】加密后:%sn', text, encryptText); String decryptText = RsaUtil.rsaDecrypt(encryptText, rsaPrivateKey); System.out.printf('【%s】經過【RSA】解密后:%sn', encryptText, decryptText); String signature = RsaUtil.sign(text, rsaPrivateKey, 'MD5'); System.out.printf('【%s】經過【RSA】簽名后:%sn', text, signature); boolean result = RsaUtil.verify(text, rsaPublicKey, signature, 'MD5'); System.out.printf('【%s】的簽名【%s】經過【RSA】驗證后結果是:' + result, text, signature);

這里完整的demo代碼:

import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey;public class RsaMain { public static void main(String[] args) { try {String text = '上山打老虎';boolean usePKCS8 = true; // usePKCS8=true表示是否成PKCS8格式的公私秘鑰,否則乘車PKCS1格式的公私秘鑰String filePath = RsaUtil.class.getClassLoader().getResource('').getPath();System.out.printf('文件路徑:%sn', filePath);// 存放pem,crt,pfx等文件的目錄byte[] publicKey, privateKey;// 公鑰和私鑰 // 生成公私鑰Object[] rsaKey = RsaUtil.generateRsaKey(usePKCS8); // usePKCS8=true表示是否成PKCS8格式的公私秘鑰,否則乘車PKCS1格式的公私秘鑰publicKey = (byte[]) rsaKey[0];privateKey = (byte[]) rsaKey[1];// 從Pem文件讀取公私鑰,filePath是文件目錄// publicKey = RsaUtil.readFromPem(filePath + 'rsa.pub');// privateKey = RsaUtil.readFromPem(filePath + 'rsa.pem');// 從pfx文件讀取公私鑰,filePath是文件目錄// Object[] rsaKey = RsaUtil.readFromPfx(filePath + 'demo.pfx',// '123456');// publicKey = (byte[]) rsaKey[0];// privateKey = (byte[]) rsaKey[1];// 從crt文件讀取公鑰(crt文件中不包含私鑰),filePath是文件目錄// publicKey = RsaUtil.readPublicKeyFromCrt(filePath + 'demo.crt');// privateKey = RsaUtil.readFromPem(filePath + 'demo.key'); // 保存到pem文件,filePath是保存目錄RsaUtil.writeToPem(publicKey, false, filePath + 'rsa.pub');RsaUtil.writeToPem(privateKey, true, filePath + 'rsa.pem'); // Pkcs8格式公鑰轉換為Pkcs1格式公鑰publicKey = RsaUtil.pkcs8ToPkcs1(false, publicKey);// Pkcs8格式私鑰轉換為Pkcs1格式私鑰privateKey = RsaUtil.pkcs8ToPkcs1(true, privateKey);// Pkcs1格式公鑰轉換為Pkcs8格式公鑰publicKey = RsaUtil.pkcs1ToPkcs8(false, publicKey);// Pkcs1格式私鑰轉換為Pkcs8格式私鑰privateKey = RsaUtil.pkcs1ToPkcs8(true, privateKey); RSAPublicKey rsaPublicKey = RsaUtil.generatePublicKey(usePKCS8, publicKey);RSAPrivateKey rsaPrivateKey = RsaUtil.generatePrivateKey(usePKCS8, privateKey); String encryptText = RsaUtil.rsaEncrypt(text, rsaPublicKey);System.out.printf('【%s】經過【RSA】加密后:%sn', text, encryptText); String decryptText = RsaUtil.rsaDecrypt(encryptText, rsaPrivateKey);System.out.printf('【%s】經過【RSA】解密后:%sn', encryptText, decryptText); String signature = RsaUtil.sign(text, rsaPrivateKey, 'MD5');System.out.printf('【%s】經過【RSA】簽名后:%sn', text, signature); boolean result = RsaUtil.verify(text, rsaPublicKey, signature, 'MD5');System.out.printf('【%s】的簽名【%s】經過【RSA】驗證后結果是:' + result, text, signature);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace(); }} }

以上就是Java 實現RSA非對稱加密算法的詳細內容,更多關于Java RSA非對稱加密算法的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 久久精品91 | 国产精品久久久久久久久久久小说 | 蜜桃精品久久久久久久免费影院 | 欧美黑人xxx | 性一交一乱一透一a级 | 君岛美绪一区二区三区 | 国产亚洲综合精品 | 国产情侣在线视频 | 国产精品免费一区 | 国产在视频一区二区三区吞精 | 精品国产一区二区三区性色 | 久久中文网 | 精品久久久久久久久久久久包黑料 | 成人在线免费视频 | 成人爽a毛片一区二区免费 亚洲自拍偷拍精品 | 欧美一级片在线观看 | 水卜樱一区二区av | 国产一区二区三区在线看 | 亚洲国产精品99久久久久久久久 | 亚洲一区二区三区四区五区中文 | 成人亚洲一区 | 四虎动漫 | 欧美亚洲一| 鲁视频 | 欧美在线视频网 | 国产视频一区二区 | 日韩视频在线观看视频 | 精品一区二区三区免费视频 | 久久精品国产99国产 | 欧美日韩中文在线观看 | 国产电影一区二区三区图片 | 久久精品国产亚卅av嘿嘿 | 成人激情视频在线播放 | 欧美一区二区三区精品 | 一区二区免费视频 | 欧美三及片 | 国产精品午夜电影 | 色毛片| 亚洲精品中文字幕 | 在线观看不卡一区 | 午夜精品久久久久久久男人的天堂 | 97碰碰碰 | 色婷婷激情 | 日韩三级电影免费观看 | 成人av观看 | va在线| 久久综合久久综合久久综合 | 99爱视频 | 亚洲一区中文字幕 | 97在线观看视频 | 自拍视频在线观看免费 | 在线看91 | 国产一级一级国产 | 人和拘一级毛片 | 精品日韩欧美一区二区三区在线播放 | av一二三四 | 久久av在线 | 成年无码av片在线 | 日韩欧美自拍 | 欧美xxxx色视频在线观看免费 | 91久久夜色精品国产网站 | 成人免费精品视频 | 国产精品一区二 | 91久久夜色精品国产九色 | 国产精品永久 | 亚洲国产一区二区三区在线观看 | 国产情侣一区二区三区 | 日韩在线观看三区 | 在线观看免费视频亚洲 | 日韩欧美一级精品久久 | 国产免费天天看高清影视在线 | 亚洲免费在线观看 | 成人国产精品久久久 | 综合色播 | 国产欧美精品 | 成人在线手机版视频 | 精品久久久久久国产 | 国产日本欧美在线 | 欧美一区免费 | 婷婷激情五月 | 日韩在线一区二区三区 | 国产乱人伦av在线a 天天碰天天操 | 国产亚洲精品美女久久久久久久久久 | 欧美精品1区2区3区 国产女无套免费网站 | 国产最新一区 | 亚洲性生活免费视频 | 亚洲国产精品成人 | 成人免费视频观看视频 | 国产91网 | 国产精品久久久久久久久软件 | 亚洲 中文 欧美 日韩在线观看 | 欧美一区二区三区免费 | gav成人免费播放视频 | 日韩在线中文字幕 | 中文成人在线 | 亚洲日本欧美 | 一区二区免费在线 | 99re免费视频精品全部 | 日本久久久影视 | 中文字幕免费看 | 日韩精品视频在线 | 国产高清视频在线 | 亚洲高清在线视频 | 日韩在线观看视频免费 | av在线播放网站 | 一区二区三区四区免费观看 | 久久久精品久久 | 久久精品中文字幕 | 亚洲在线播放 | 日韩久久久一区二区 | 成人黄色短视频在线观看 | 亚洲va中文字幕 | 精品久久久久久久久久久久久久 | 国产极品视频在线观看 | 中国特黄毛片 | 成人精品一区二区三区 | 日日夜夜摸| 欧美综合激情 | www国产成人免费观看视频 | 一区二区三区四区免费 | 日韩91视频 | 国产成人一区二区三区 | 亚洲国产精品一区 | hsck成人网 | 欧美男人天堂 | 久久国产精品影视 | 久久久久久久一区二区三区 | 精品国产一区二区三区久久久蜜月 | 亚洲精选久久久 | 四虎成人免费电影 | 国产不卡一二三区 | 亚洲品质自拍视频网站 | 日韩免费av一区二区 | 中文字幕一页二页 | 亚洲欧洲免费视频 | 国产精品久久久久一区二区三区 | 日韩在线精品视频 | 国产精品欧美一区二区三区 | 午夜视频 | 亚洲日本欧美日韩高观看 | 九九久久国产 | 精品在线一区二区三区 | 亚洲国产1区| 极品videossex中国妞hd | 国产中文字幕在线观看 | 久久久久久黄 | 青青草人人| 欧美日韩亚洲一区二区 | 日韩欧美在线观看视频 | 亚洲性网| 一区二区三区免费网站 | www国产亚洲 | 久久女人网 | 一区二区三区国产精品 | 黄色大片免费网址 | 91九色网站 | 久久精品国产一区 | 亚洲精品成人在线 | 久久九九精品视频 | 狠狠综合久久av一区二区老牛 | 91在线影院| 日韩超级大片免费看国产国产播放器 | 欧美日韩一区二区在线 | 中文字幕在线免费看 | 成人精品一区二区三区 | 日韩精品一区二区三区四区 | 秋霞av电影 | 日韩一区二区三区在线观看 | 成人欧美在线视频 | 国产高清久久久 | 国产一区二区在线看 | 成人免费视频网站在线看 | 成人精品视频在线观看 | 日韩欧美视频一区 | 久久久久久国产 | 久久午夜电影 | 日日操视频 | 午夜免费福利影院 | 国产成人久久 | 久久黄网 | 99热在线精品免费 | 成av在线| 中文字幕视频在线播放 | 久久婷婷麻豆国产91天堂 | 亚洲黄页| 欧美三区 | 国产成人免费视频网站视频社区 | 国产一区不卡视频 | 日韩欧美自拍 | 久爱国产| 久久精品欧美 | 成人黄色在线视频 | 综合久久亚洲 | 免费精品视频 | 成年人免费看 | 国产精品美女久久久久久久久久久 | 成年人看的羞羞网站 | 亚洲欧美日韩在线一区 | 欧美夜夜爽 | 奇米av| 狠狠综合久久av一区二区老牛 | 欧美日韩六区 | 亚洲三级在线观看 | 福利片在线 | 日本 欧美 国产 | 久久91视频| 欧美精品成人一区二区三区四区 | 日韩成人精品在线 | 国产一区二区三区网站 | 久久一二区 | 日韩中文一区二区 | 日韩一区二区精品视频 | 欧美精品在线看 | 日韩视频不卡 | www.日本精品 | 欧美日韩第一 | 成人免费国产 | 成人精品鲁一区一区二区 | 影音先锋成人资源网 | 韩国av片在线观看 | 91精品麻豆日日躁夜夜躁 | 久久亚洲一区二区三区四区 | 自拍视频免费 | 麻豆色呦呦 | 欧美不卡一区二区三区 | 99日韩| 日本欧美久久久久 | 国产精品久久久久久久久久久新郎 | 国产精品高清在线观看 | 久久久影视 | 国产一区二区三区在线免费观看 | 91久久精品国产91久久 | 羞羞视频在线观看视频 | 中文无码日韩欧 | 国产午夜精品美女视频明星a级 | 人人做人人澡人人爽欧美 | 91大神在线看 | 午夜精品久久久 | 国产精品视频一区二区三区四 | 亚洲欧美日韩另类精品一区二区三区 | 亚洲一区二区三区免费在线 | 国产综合亚洲精品一区二 | 国产精品一区二区三区在线 | 天天夜夜操操 | 中文字幕一区二区三区乱码在线 | 一级片免费视频 | 欧洲亚洲精品久久久久 | 成人午夜视频在线观看 | 国产精品中文字幕在线 | 蜜桃日韩| 国产视频2021 | 国产精品久久久久久久久久免费 | 蜜桃视频一区二区 | 特一级黄色片 | 黄a在线| 国产精品久久久久久久久污网站 | 欧美在线a | 在线视频中文字幕 | 日韩一区二区三区在线 | 国产精品一区二区三区四区 | 国产精品夜间视频香蕉 | 日韩欧美h | 久久99精品久久久水蜜桃 | 国产精品黄网站在线观看 | 免费在线观看毛片网站 | 国产欧美综合一区 | 日韩一区二区黄色片 | av综合在线观看 | 国产精品亚洲欧美日韩一区在线 | 日本黄网站在线观看 | 91资源总站| 国产成人精品一区二区三区四区 | 国产福利视频 | 国精产品一区二区三区黑人免费看 | 91精品国产91久久久久久密臀 | 中文字字幕在线 | 日韩在线观看中文字幕 | 中文字幕一区二区三区乱码在线 | 躁躁躁日躁夜夜躁 | 羞羞视频免费观看入口 | 国产免费高清 | 精品日韩欧美一区二区三区在线播放 | www.欧美| 成人h视频在线观看 | 欧美日韩一区二区在线播放 | 国产精品久久久久久久久久久久久久 | 我要看免费黄色片 | 亚洲狠狠爱 | 天天操天天干视频 | 伊人激情网 | 国产精品1区2区在线观看 | 久久久久久亚洲一区二区三区蜜臀 | 精品久久久久久亚洲精品 | 午夜免费小视频 | 国产激情午夜 | 国产在线视频一区 | 欧美99| 国产成人精品电影 | 黄色成人av | 亚洲三级视频 | 在线观看成人av | 日韩成人在线观看 | 亚洲欧美国产精品专区久久 | 亚洲天堂一区 | 欧美视频免费看 | www精品 | 国产做a爰片久久毛片a我的朋友 | 国产aⅴ一区二区 | 久久久久亚洲 | 亚洲黄色免费 | 黄色小视频网 | 欧美日韩一区二区三区四区 | 欧美video| 美女一级毛片 | 在线免费观看黄 | 亚洲免费精品网站 | 国产一区二区三区久久久 | 91精品国产91久久久久久黑人 | 成人小视频在线观看 | 亚洲成人av片 | 色视频网站免费看 | 国产亚洲精品一区二区 | 中文字幕亚洲欧美精品一区四区 | 国产成人在线网站 | 国产女人和拘做受在线视频 | 久久国产99 | 国产乱码精品一区二区三 | 国产免费一区二区 | 成人免费视频网址 | 国产第一区在线观看 | 国产亚洲女人久久久久毛片 | 中文字幕免费看 | 日韩精品999 | 久久精品免费一区二区三区 | 国产精品日韩一区二区 | 色综合激情 | 亚洲免费视频一区 | 欧美成人高清视频 | 国产九九九 | 久久一区二区av | 超碰人人射 | 国产性一级片 | www久久99| 影音先锋中文字幕一区 | 一本色道久久综合狠狠躁篇的优点 | 日本久久99 | 成人特区 | 午夜视频黄 | 久久精品欧美一区二区三区不卡 | 精品久久久久久久久福利 | 久久精品中文字幕 | 天堂视频中文字幕 | 四虎黄色网| 在线观看精品91福利 | 日本中文在线 | 成人综合在线观看 | 亚洲成人精品 | 久久69精品久久久久久久电影好 | 亚洲精品一区二区三区蜜桃久 | 亚洲精品影院 | 久久丁香| 久久99国产一区二区三区 | 久久首页 | 久久国产精品久久久久久电车 | 岛国av一区| 91tv亚洲精品香蕉国产一区 | 国产精品毛片久久久久久久 | 懂色一区二区三区av片 | 欧美午夜一区 | 91中文字幕| 免费看的av | 欧美中文在线 | 一区二区av在线 | 亚洲欧美日韩电影 | 久久国产精品精品国产 | 一级黄色片美国 | 亚洲欧美视频 | 国产精品久久久久无码av | 亚洲精品乱码久久久久久蜜桃不爽 | av在线入口| 精品日韩一区二区三区 | 欧美视频免费在线 | 特黄特黄视频 | 精品在线看 | 成人毛片在线观看视频 | www.一区二区 | 国产专区一区二区三区 | 国产精品国产精品国产专区不片 | 国产性猛交xxxx免费看久久 | 亚洲一区二区免费看 | 成人综合在线观看 | 午夜精品一区二区三区在线视频 | 97视频在线免费观看 | 中文字幕av一区二区 | 风间由美一区二区三区在线观看 | 欧洲一区二区在线观看 | 国产精产国品一二三产区视频 | 亚洲狠狠爱 | 超碰天天 | 国产精品大片在线观看 | 99精品国产高清一区二区麻豆 | 欧美午夜三级视频 | 精品少妇一区二区三区在线播放 | 国产精品久久久久久久久久小说 | 国产精品久久久久久久7电影 | 精品久久久久一区二区国产 | 妞干网av | 欧美激情亚洲 | 国产成人精品一区二区三区视频 | 中文字幕日韩视频 | 日韩一片 | 中文字字幕一区二区三区四区五区 | 91一区二区三区 | 成人精品国产 | 成人在线播放网站 | 国产高清在线精品一区 | 日日综合 | 日本福利网站 | 操操操操操操操操操操操操操操 | 天天看天天爽 | 欧美精品欧美精品系列 | 久久三区 | 亚洲毛片| 亚洲热妇 | 天堂资源 | 蜜桃久久av | 久久精品 | 奇米在线视频 | 亚洲国产精品久久久久 | 国产最新视频 | a在线播放 | 久久亚洲精品中文字幕 | 国产精品久久久久久久久久久久 | 国产精品国产精品国产专区不卡 | av网站在线免费观看 | 免费在线a | 成人欧美一区二区三区色青冈 | 91久久久久久久久久久久久久 | 亚色在线 | 精品乱码久久久 | 91天天综合| 1000部精品久久久久久久久 | 久久婷婷麻豆国产91天堂 | 精品美女久久久 | 亚洲伊人久久综合 | 日韩高清av | 欧美精品一区二区三区一线天视频 | 三级黄色片在线免费观看 | 中文字幕一二区 | 99国产精品久久久久久久 | 天堂av中文| 欧美日韩激情在线 | 在线观看免费av电影 | 欧美成人专区 | 久久久99精品免费观看 | 国产精品自拍视频 | 麻豆久久| 免费日韩成人 | 91精品久久久久久久久久 | 久久久久久影院 | 久久精品亚洲精品 | 日本免费黄色 | 成人在线看片 | 久久久.com | 国产精品18 | 亚洲欧美精品一区 | 色欧美日韩 | 精品一区二区三区免费 | 国产在视频一区二区三区吞精 | 91在线视频免费观看 | 精品一区二区三区免费 | 91精品国产美女在线观看 | 日韩免费| 天天拍天天操 | 国产另类ts人妖一区二区 | 大桥未久亚洲精品久久久强制中出 | 激情婷婷 | 国产一区二区三区视频在线观看 | 久草久草久草 | 中文字幕精品一区久久久久 | 国产亚洲精品精品国产亚洲综合 | www.国产精品| 成年网站在线 | 亚洲欧美少妇 | 国产精品爱久久久久久久 | 国产综合精品一区二区三区 | 日韩av一区二区三区四区 | 91在线高清观看 | 国产精品亚洲精品 | 超碰人人爱| 亚洲欧美高清 | 最新超碰 | 精品一二区 | 久久久a | 久久精品一区二区三区四区 | 黄色片在线免费观看 | 亚洲国产高清视频 | 亚洲最大免费视频 | 欧美久久一区二区 | 69av.com| 久久精品国产免费 | 精品国产乱码久久久久久影片 | 91av免费在线| 日韩精品一区二区三区四区视频 | 在线观看理论电影 | 蜜桃视频麻豆女神沈芯语免费观看 | 黄色一级大片在线免费看产 | 九色在线播放 | 亚洲久久视频 | 国产精品一区二区在线 | 91精品国产92 | 日韩免费一区 | 国产精品久久久久久久 | 成人国产精品免费观看 | 两性午夜视频 | 日韩欧美在线视频 | 欧美,日韩,国产精品免费观看 | 毛片com| 在线高清av | 欧美日韩精品一区二区三区四区 | 久草 在线| 免费观看黄a一级视频 | 国产精品久久久久久久久久 | 福利视频一| 久久亚洲美女 | 欧美午夜精品一区二区三区电影 | 国产精品91av| 91中文字幕在线观看 | 黄色小视频在线免费观看 | 国产91精品在线 | 在线观看v片 | 日韩精品视频在线播放 | 欧美日韩精 | 欧美成人a| 国产精品成人免费视频 | 99国产精品久久久久久久 | 欧美一级片免费在线观看 | 真实国产露脸乱 | 久久久久国产成人精品亚洲午夜 | 亚洲日韩中文字幕一区 | 久久福利电影 | 曰曰操| 成人午夜电影网 | 欧美一区2区三区3区公司 | 97人人看 | 久久国产区 | 久久99深爱久久99精品 | 国产免费国产 | 久久久国产精品 | 国产成人精品免高潮在线观看 | 最新午夜 | 狠狠草视频 | 亚洲免费精品 | 亚洲热av | 一区二区三区四区精品 | 国产在线一区二区三区 | 国产一区久久 | 逼逼av | 99爱精品在线 | 亚洲精品成人无限看 | 一区二区三区四区免费观看 | 亚洲视频一区二区三区 | h免费在线观看 | 亚洲精品久久久久久久久久久久久 | 国产精品久久久久久久久久 | 美女超碰在线 | 成人aaaa | 伊人精品视频在线观看 | 亚洲日韩中文字幕 | www.久久精品 | 日韩不卡一二三 | 精品一区二区三区久久 | 一区毛片| 国产精品综合一区二区 | 看片久久 | 国产精品夜间视频香蕉 | 成人网av| 亚洲精品一区二区在线 | 久久夜精| 久久99er6热线精品首页蜜臀 | www,久久久| 91在线精品一区二区 | 资源av| 欧美 日韩 亚洲 一区 | 国产欧美亚洲精品 | 久热中文字幕 | 国产毛片a级 | 龙珠z国语291集普通话 | 国产高清不卡在线 | 久草免费在线 | 国产精品国产三级国产a | 午夜免| www久久久| av免费网站 | 精品成人一区 | 国产农村妇女精品一二区 | 毛片国产| 天堂久久爱资源站www | a黄视频| 国产在线一区二区三区 | 日本天堂在线播放 | 亚洲av毛片| 国产成人免费视频网站视频社区 | 欧美1级 | 欧美国产精品久久久 | 嫩草视频在线播放 | 99视频在线| 91精品国产一区二区 | 欧洲成人在线 | 国产精品成人久久久久 | 日韩欧美一区二区三区免费观看 | 91精品国产综合久久国产大片 | 久久国产视频精品 | 亚洲免费视频网 | 日韩一区电影 |