一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - java基于Des對(duì)稱加密算法實(shí)現(xiàn)的加密與解密功能詳解

java基于Des對(duì)稱加密算法實(shí)現(xiàn)的加密與解密功能詳解

2020-07-23 11:45QH_JAVA Java教程

這篇文章主要介紹了java基于Des對(duì)稱加密算法實(shí)現(xiàn)的加密與解密功能,結(jié)合實(shí)例形式詳細(xì)分析了Des加密算法的功能、原理、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了java基于Des對(duì)稱加密算法實(shí)現(xiàn)的加密與解密功能。分享給大家供大家參考,具體如下:

Des 加密相關(guān)類介紹:

SecureRandom  這個(gè)類是繼承自java.util.Random 這個(gè)類

SecureRandom 這個(gè)類的構(gòu)造器有三種,下面例舉兩種:

SecureRandom()構(gòu)造一個(gè)實(shí)現(xiàn)默認(rèn)隨機(jī)數(shù)算法的安全隨機(jī)數(shù)生成器 (RNG)。

SecureRandom(byte[] seed)構(gòu)造一個(gè)實(shí)現(xiàn)默認(rèn)隨機(jī)數(shù)算法的安全隨機(jī)數(shù)生成器 (RNG)。

DESKeySpec 這個(gè)類是用來使用原始秘鑰來生成秘鑰的秘鑰內(nèi)容

DESKeySpec 有兩個(gè)構(gòu)造函數(shù):

DESKeySpec(byte[] key) 創(chuàng)建一個(gè) DESKeySpec 對(duì)象,使用 key 中的前 8 個(gè)字節(jié)作為 DES 密鑰的密鑰內(nèi)容。

DESKeySpec(byte[] key, int offset) 創(chuàng)建一個(gè) DESKeySpec 對(duì)象,使用 key 中始于且包含 offset 的前 8 個(gè)字節(jié)作為 DES-EDE 密鑰的密鑰內(nèi)容。

SecretKeyFactory , 密鑰工廠用來將密鑰(類型 Key 的不透明加密密鑰)轉(zhuǎn)換為密鑰規(guī)范(底層密鑰材料的透明表示形式),反之亦然。秘密密鑰工廠只對(duì)秘密(對(duì)稱)密鑰進(jìn)行操作。

SecretKey對(duì)象,秘鑰對(duì)象,通過調(diào)用秘鑰工廠的generateSecret(DESKeySpec deskeyspace) 方法來生成秘鑰

Cipher 類為加密和解密提供密碼功能,通過調(diào)用Cipher的getInstance("des") 來獲取實(shí)例

Cipher 對(duì)象調(diào)用init() 方法進(jìn)行對(duì)象的初始化,init() 方法的具體參數(shù)按照具體情況而定,有加密的也有解密的常量

最后調(diào)用Cipher的doFinal() 方法進(jìn)行加密解密。

在這里請(qǐng)教大家一個(gè)問題,不管是第一種使用BASE64Encoder編碼還是第二種org.apache.commons.codec.binary.Base64編碼,在將String 轉(zhuǎn)化為byte以及將byte轉(zhuǎn)化為String 時(shí)需要 UTF-8/GBK 等編碼來編碼,解碼嗎?

一、使用了 sun.misc.BASE64Decoder 和BASE64Encoder 進(jìn)行解碼,編碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package com.soufun.com;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Date;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
// 導(dǎo)入sun的64位編碼
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
 *@author WHD
 *
 *即使導(dǎo)入sun.misc這個(gè)架包也會(huì)報(bào)錯(cuò),這時(shí)首先把你的JRE架包移除再導(dǎo)入一次就可以了
 */
public class DesUtil {
  // 定義加密方式
   private final static String DES = "DES";
   private final static String UTF8="GBK";
   static SecretKeyFactory keyFactory = null;
  static {
    try {
      keyFactory=SecretKeyFactory.getInstance("DES");
    } catch (NoSuchAlgorithmException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
    public static void main(String[] args) throws Exception {
      long begin=new Date().getTime();
      String data = "aaades加密測(cè)試";
      // 注意:DES加密和解密過程中,密鑰長(zhǎng)度都必須是8的倍數(shù)
      String key = "qazwsxed";
      System.err.println(encrypt(data, key));
      System.err.println(decrypt(encrypt(data, key), key));
      long end =new Date().getTime();
      System.out.println(end-begin);
    }
    /**
     * Description 根據(jù)鍵值進(jìn)行加密
     * @param data
     * @param key 加密鍵byte數(shù)組
     * @return
     * @throws Exception
     */
    public static String encrypt(String data, String key) throws Exception {
      // 使用指定的編碼獲取要加密的內(nèi)容,一般秘鑰都是字母或數(shù)字不用指定編碼,但指定也可以
      byte[] bt = encrypt(data.getBytes(UTF8), key.getBytes(UTF8));
      //注意:在加密和解密的時(shí)候使用sun的BASE64Encoder()進(jìn)行編碼和解碼不然會(huì)有亂碼
      //網(wǎng)上查看了很多實(shí)例,都沒有編碼和解碼,也說沒有亂碼問題,而我這里出現(xiàn)了亂碼,所以使用BASE64Encoder()進(jìn)行了編碼解碼
      String strs = new BASE64Encoder().encode(bt);
      return strs;
    }
    /**
     * Description 根據(jù)鍵值進(jìn)行解密
     * @param data
     * @param key 加密鍵byte數(shù)組
     * @return
     * @throws IOException
     * @throws Exception
     */
    public static String decrypt(String data, String key) throws IOException,
        Exception {
      if (data == null)
        return null;
      //注意:在加密和解密的時(shí)候使用sun的BASE64Encoder()進(jìn)行編碼和解碼不然會(huì)有亂碼
      BASE64Decoder decoder = new BASE64Decoder();
      byte[] buf = decoder.decodeBuffer(data);
      byte[] bt = decrypt(buf,key.getBytes());
      return new String(bt,UTF8);
    }
    /**
     * Description 根據(jù)鍵值進(jìn)行加密
     * @param data
     * @param key 加密鍵byte數(shù)組
     * @return
     * @throws Exception
     */
    private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
      // 生成一個(gè)可信任的隨機(jī)數(shù)源
      SecureRandom sr = new SecureRandom();
      // 從原始密鑰數(shù)據(jù)創(chuàng)建DESKeySpec對(duì)象,也就是創(chuàng)建秘鑰的秘鑰內(nèi)容
      DESKeySpec dks = new DESKeySpec(key);
      // 密鑰工廠用來將密鑰(類型 Key 的不透明加密密鑰)轉(zhuǎn)換為密鑰規(guī)范(底層密鑰材料的透明表示形式),反之亦然。秘密密鑰工廠只對(duì)秘密(對(duì)稱)密鑰進(jìn)行操作。
      // 這里改為使用單例模式
      //SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
      //根據(jù)提供的密鑰規(guī)范(密鑰材料)生成 SecretKey(秘鑰) 對(duì)象。
      SecretKey securekey = keyFactory.generateSecret(dks);
      // Cipher對(duì)象實(shí)際完成加密操作,此類為加密和解密提供密碼功能
      Cipher cipher = Cipher.getInstance(DES);
      // 用密鑰和隨機(jī)源初始化此 Cipher。ENCRYPT_MODE用于將 Cipher 初始化為加密模式的常量。
      cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
      //正式執(zhí)行加密操作
      return cipher.doFinal(data);
    }
    /**
     * Description 根據(jù)鍵值進(jìn)行解密
     * @param data
     * @param key 加密鍵byte數(shù)組
     * @return
     * @throws Exception
     */
    private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
      // 生成一個(gè)可信任的隨機(jī)數(shù)源
      SecureRandom sr = new SecureRandom();
      // 從原始密鑰數(shù)據(jù)創(chuàng)建DESKeySpec對(duì)象,也就是創(chuàng)建秘鑰的秘鑰內(nèi)容
      DESKeySpec dks = new DESKeySpec(key);
      // 密鑰工廠用來將密鑰(類型 Key 的不透明加密密鑰)轉(zhuǎn)換為密鑰規(guī)范(底層密鑰材料的透明表示形式),反之亦然。秘密密鑰工廠只對(duì)秘密(對(duì)稱)密鑰進(jìn)行操作。
      // 這里改為使用單例模式
      //SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
      //根據(jù)提供的密鑰規(guī)范(密鑰材料)生成 SecretKey(秘鑰)對(duì)象。
      SecretKey securekey = keyFactory.generateSecret(dks);
      // Cipher類為加密和解密提供密碼功能
      Cipher cipher = Cipher.getInstance(DES);
      // DECRYPT_MODE用于將 Cipher 初始化為解密模式的常量。
      cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
      // 正式進(jìn)行解密操作
      return cipher.doFinal(data);
    }
}

二、使用org.apache.commons.codec.binary.Base64 進(jìn)行解碼,編碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package com.soufun.com;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Date;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import org.apache.commons.codec.binary.Base64;
/**
 *@author WHD
 *
 */
public class DesUtil {
  // 定義加密方式
   private final static String DES = "DES";
   private final static String UTF8="GBK";
   static SecretKeyFactory keyFactory = null;
  static {
    try {
      keyFactory=SecretKeyFactory.getInstance("DES");
    } catch (NoSuchAlgorithmException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
    public static void main(String[] args) throws Exception {
      long begin=new Date().getTime();
      String data = "aaades加密測(cè)試";
      // 注意:DES加密和解密過程中,密鑰長(zhǎng)度都必須是8的倍數(shù)
      String key = "qazwsxed";
      System.err.println(encrypt(data, key));
      System.err.println(decrypt(encrypt(data, key), key));
      long end =new Date().getTime();
      System.out.println(end-begin);
    }
    /**
     * Description 根據(jù)鍵值進(jìn)行加密
     * @param data
     * @param key 加密鍵byte數(shù)組
     * @return
     * @throws Exception
     */
    public static String encrypt(String data, String key) throws Exception {
      // 使用指定的編碼獲取要加密的內(nèi)容,一般秘鑰都是字母或數(shù)字不用指定編碼,但指定也可以
      byte[] bt = encrypt(data.getBytes(UTF8), key.getBytes());
      // 第一個(gè)使用了sun.misc.BASE64Encoder;進(jìn)行了編碼,但網(wǎng)上說使用org.apache.commons.codec.binary.Base64比較好所以拿來試試
      String strs = Base64.encodeBase64String(bt);
      return strs;
    }
    /**
     * Description 根據(jù)鍵值進(jìn)行解密
     * @param data
     * @param key 加密鍵byte數(shù)組
     * @return
     * @throws IOException
     * @throws Exception
     */
    public static String decrypt(String data, String key) throws IOException,
        Exception {
      if (data == null)
        return null;
      // 使用org.apache.commons.codec.binary.Base64解碼
      byte [] buf=Base64.decodeBase64(data);
      byte[] bt = decrypt(buf,key.getBytes());
      return new String(bt,UTF8);
    }
    /**
     * Description 根據(jù)鍵值進(jìn)行加密
     * @param data
     * @param key 加密鍵byte數(shù)組
     * @return
     * @throws Exception
     */
    private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
      // 生成一個(gè)可信任的隨機(jī)數(shù)源
      SecureRandom sr = new SecureRandom();
      // 從原始密鑰數(shù)據(jù)創(chuàng)建DESKeySpec對(duì)象,也就是創(chuàng)建秘鑰的秘鑰內(nèi)容
      DESKeySpec dks = new DESKeySpec(key);
      // 密鑰工廠用來將密鑰(類型 Key 的不透明加密密鑰)轉(zhuǎn)換為密鑰規(guī)范(底層密鑰材料的透明表示形式),反之亦然。秘密密鑰工廠只對(duì)秘密(對(duì)稱)密鑰進(jìn)行操作。
      // 這里改為使用單例模式
      //SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
      //根據(jù)提供的密鑰規(guī)范(密鑰材料)生成 SecretKey(秘鑰) 對(duì)象。
      SecretKey securekey = keyFactory.generateSecret(dks);
      // Cipher對(duì)象實(shí)際完成加密操作,此類為加密和解密提供密碼功能
      Cipher cipher = Cipher.getInstance(DES);
      // 用密鑰和隨機(jī)源初始化此 Cipher。ENCRYPT_MODE用于將 Cipher 初始化為加密模式的常量。
      cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
      //正式執(zhí)行加密操作
      return cipher.doFinal(data);
    }
    /**
     * Description 根據(jù)鍵值進(jìn)行解密
     * @param data
     * @param key 加密鍵byte數(shù)組
     * @return
     * @throws Exception
     */
    private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
      // 生成一個(gè)可信任的隨機(jī)數(shù)源
      SecureRandom sr = new SecureRandom();
      // 從原始密鑰數(shù)據(jù)創(chuàng)建DESKeySpec對(duì)象,也就是創(chuàng)建秘鑰的秘鑰內(nèi)容
      DESKeySpec dks = new DESKeySpec(key);
      // 密鑰工廠用來將密鑰(類型 Key 的不透明加密密鑰)轉(zhuǎn)換為密鑰規(guī)范(底層密鑰材料的透明表示形式),反之亦然。秘密密鑰工廠只對(duì)秘密(對(duì)稱)密鑰進(jìn)行操作。
      // 這里改為使用單例模式
      //SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
      //根據(jù)提供的密鑰規(guī)范(密鑰材料)生成 SecretKey(秘鑰)對(duì)象。
      SecretKey securekey = keyFactory.generateSecret(dks);
      // Cipher類為加密和解密提供密碼功能
      Cipher cipher = Cipher.getInstance(DES);
      // DECRYPT_MODE用于將 Cipher 初始化為解密模式的常量。
      cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
      // 正式進(jìn)行解密操作
      return cipher.doFinal(data);
    }
}

一、二中使用到的架包下載地址:

下載: sun.misc.BASE64Decoder 。
下載:apache的Base64編碼、解碼器 。

三、未使用任何編碼,解碼架包

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
package com.soufun.com;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
/**
 *@author WHD
 *
 */
public class DESCrypt {
  static SecretKeyFactory secretKeyFactory = null;
  //Cipher 的“算法/模式/填充”
  static final String CIPHER = "DES/CBC/PKCS5Padding";
  static {
    try {
      // 在靜態(tài)代碼塊中獲取秘鑰工程
      secretKeyFactory = SecretKeyFactory.getInstance("DES");
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    }
  }
  // 定義常量 ,編碼格式
  private static final String UTF8 = "GBK";
  /*
   * 對(duì)象緩存的容器
   */
  static abstract class Cache {
    private final Map innerCache = new HashMap();
    protected abstract Object createValue(Object key) throws Exception;
    public Object get(Object key) throws Exception {
      Object value;
      synchronized (innerCache) {
        value = innerCache.get(key);
        if (value == null) {
          value = new CreationPlaceholder();
          innerCache.put(key, value);
        }
      }
      if (value instanceof CreationPlaceholder) {
        synchronized (value) {
          CreationPlaceholder progress = (CreationPlaceholder) value;
          if (progress.value == null) {
            progress.value = createValue(key);
            synchronized (innerCache) {
              innerCache.put(key, progress.value);
            }
          }
          return progress.value;
        }
      }
      return value;
    }
    static final class CreationPlaceholder {
      Object value;
    }
  }
  /*
   * hex->str & str->hex
   */
  public static byte[] stringToHex(String ss) {
    // 字符串轉(zhuǎn)化we
    byte digest[] = new byte[ss.length() / 2];
    for (int i = 0; i < digest.length; i++) {
      String byteString = ss.substring(2 * i, 2 * i + 2);
      int byteValue = Integer.parseInt(byteString, 16);
      digest[i] = (byte) byteValue;
    }
    return digest;
  }
  public static String hexToString(byte b[]) {
    StringBuffer hexString = new StringBuffer();
    for (int i = 0; i < b.length; i++) {
      String plainText = Integer.toHexString(0xff & b[i]);
      if (plainText.length() < 2) {
        hexString.append("0");
      }
      hexString.append(plainText);
    }
    return hexString.toString();
  }
  private static byte[] _convertKeyIv(String text) throws IOException {
    if (text.length() == 8) {
      return text.getBytes(UTF8);
    }
    if (text.startsWith("0x") && text.length() == 32) {
      byte[] result = new byte[8];
      for (int i = 0; i < text.length(); i += 2) {
        if (text.charAt(i++) == '0' && text.charAt(i++) == 'x') {
          try {
            result[i / 4] = (byte) Integer.parseInt(
                text.substring(i, i + 2), 16);
          } catch (Exception e) {
            throw new IOException("TXT '" + text + "' is invalid!");
          }
        }
      }
      return result;
    }
    throw new IOException("TXT '" + text + "' is invalid!");
  }
  /*
   * SecretKey & IvParameterSpec的緩存
   */
  private static Cache SecretKeySpecs = new Cache() {
    protected Object createValue(Object key) throws Exception {
      SecretKey secretKeyObj = null;
      try {
        secretKeyObj = secretKeyFactory.generateSecret(new DESKeySpec(
            _convertKeyIv((String) key)));
      } catch (Exception e) {
        e.printStackTrace();
      }
      return secretKeyObj;
    }
  };
  private static Cache IvParamSpecs = new Cache() {
    protected Object createValue(Object key) throws Exception {
      IvParameterSpec ivObj = null;
      ivObj = new IvParameterSpec(_convertKeyIv((String) key));
      return ivObj;
    }
  };
  /*
   * 加密&解密
   */
  public static String encrypt(String text, String authKey, String authIv) {
    SecretKey secretKeyObj = null;
    IvParameterSpec ivObj = null;
    try {
      secretKeyObj = (SecretKey) SecretKeySpecs.get(authKey);
      ivObj = (IvParameterSpec) IvParamSpecs.get(authIv);
    } catch (Exception e) {
      e.printStackTrace();
    }
    byte[] data = null;
    try {
      data = text.getBytes(UTF8);
    } catch (Exception e) {
      e.printStackTrace();
    }
    byte[] authToken = null;
    try {
      authToken = encrypt(data, secretKeyObj, ivObj);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return hexToString(authToken);
  }
  public static byte[] encrypt(byte[] data, SecretKey secretKey,
      IvParameterSpec iv) throws Exception {
    Cipher cipher = Cipher.getInstance(CIPHER);
    cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
    return cipher.doFinal(data);
  }
  public static String decrypt(String hexString, String authKey, String authIv)
      throws Exception {
    SecretKey secretKeyObj = null;
    IvParameterSpec ivObj = null;
    try {
      secretKeyObj = (SecretKey) SecretKeySpecs.get(authKey);
      ivObj = (IvParameterSpec) IvParamSpecs.get(authIv);
    } catch (Exception e) {
      e.printStackTrace();
    }
    String text = decrypt(hexString, secretKeyObj, ivObj);
    return text;
  }
  public static String decrypt(String message, SecretKey secretKey,
      IvParameterSpec iv) throws Exception {
    byte[] data = stringToHex(message);
    return decrypt(data, secretKey, iv);
  }
  public static String decrypt(byte[] data, SecretKey secretKey,
      IvParameterSpec iv) throws Exception {
    Cipher cipher = Cipher.getInstance(CIPHER);
    cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
    byte[] retByte = cipher.doFinal(data);
    return new String(retByte);
  }
  public static void main(String[] args) throws Exception {
    long begin= new Date().getTime();
    String authKey = "w8f3k9c2";
    String authIv = "w8f3k9c2";
    String text = "aaades加密測(cè)試";
    // 140CB412BA03869F
    // 140cb412ba03869f
    // 對(duì)原文進(jìn)行加密
    String encryptedText = encrypt(text, authKey, authIv);
    System.out.println("encryptedText:" + encryptedText);
    // 對(duì)密文進(jìn)行還原
    String plainText = decrypt(encryptedText, authKey, authIv);
    System.out.println("plainText:" + plainText);
    //2a329740ce15f549be64190b183a5be2
    long end =new Date().getTime();
    System.out.println(end-begin);
  }
}

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 男人的视频网站 | 国产自拍啪啪 | 短篇小说肉 | 卫生间被教官做好爽HH视频 | 天堂伊人| 四虎影院在线免费观看 | 国产高清不卡视频在线播放 | 好男人资源免费播放在线观看 | 欧美日韩亚洲一区二区三区在线观看 | 四虎国产视频 | 天天色天| 国产伦精品一区二区三区免费观看 | 国产精品酒店视频免费看 | 99小视频| 动漫白丝袜美女羞羞 | 免费高清视频日本 | 惩罚狠h调教灌满 | 黑人草| 欧美日韩一区二区三区免费 | 久久中文字幕免费高清 | 美女被爆| 香蕉精品国产高清自在自线 | 午夜精品久视频在线观看 | 精品一区二区视频 | 丰腴尤物贵妇浪荡小说 | 亚洲精品资源在线 | 好大好深好涨好烫还要 | 99久久国产综合精品女不卡 | 国产成人免费片在线视频观看 | 亲爱的客栈第二季免费观看完整版 | 精品国语对白精品自拍视 | 日本zzzzwww大片免费 | 饭冈加奈子在线播放观看 | 色综合天天综合中文网 | 精品国产一区二区三区久久久蜜臀 | 日本人成大片在线 | kuaibo成人播放器 | 免费理伦片在线观看全网站 | 色噜噜亚洲男人的天堂www | 门卫老张和女警花小说 | 欧美免赞性视频 |