diff --git a/CHANGELOG.md b/CHANGELOG.md index e3ca466..5ec6f1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,12 @@ #Changelog +## 2.0.0 (2021-08-19) +* 处理加密模式 ECB 不安全问题 +* 删除 com.qiniu.android.dns.http.DnspodEnterprise +* 删除 com.qiniu.android.dns.util.BitSet.java +* 删除 com.qiniu.android.dns.util.DES.java +* 删除 com.qiniu.android.dns.util.MD5.java + + ## 1.0.1 (2022-06-02) ### 修改 diff --git a/README.md b/README.md index b252d17..9d3b1eb 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ ### 通过maven * Android Studio中添加dependencies 或者 在项目中添加maven依赖 ``` -implementation 'com.qiniu:happy-dns:1.0.1' +implementation 'com.qiniu:happy-dns:2.0.0' ``` diff --git a/library/src/androidTest/java/com/qiniu/android/dns/DnspodEnterpriseTest.java b/library/src/androidTest/java/com/qiniu/android/dns/DnspodEnterpriseTest.java deleted file mode 100644 index 4c42114..0000000 --- a/library/src/androidTest/java/com/qiniu/android/dns/DnspodEnterpriseTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.qiniu.android.dns; - -import android.test.AndroidTestCase; - -/** - * Created by bailong on 15/7/23. - */ -public class DnspodEnterpriseTest extends AndroidTestCase { -// public void testFound() throws IOException { -// DnspodEnterprise resolver = new DnspodEnterprise("", ""); -// try { -// Record[] records = resolver.resolve(new Domain("baidu.com"), null); -// Assert.assertNotNull(records); -// Assert.assertTrue(records.length > 0); -// } catch (IOException e) { -// Assert.fail(e.getMessage()); -// } -// } -// -// public void testNotFound() throws IOException { -// DnspodEnterprise resolver = new DnspodEnterprise("007", "abcdef"); -// try { -// Record[] records = resolver.resolve(new Domain("7777777.qiniu.com"), null); -// Assert.assertNull(records); -// } catch (IOException e) { -// Assert.fail(e.getMessage()); -// } -// } -} diff --git a/library/src/main/java/com/qiniu/android/dns/Version.java b/library/src/main/java/com/qiniu/android/dns/Version.java index 3d5163c..bcf279e 100644 --- a/library/src/main/java/com/qiniu/android/dns/Version.java +++ b/library/src/main/java/com/qiniu/android/dns/Version.java @@ -4,5 +4,5 @@ * Created by bailong on 15/6/12. */ public final class Version { - public static final String VERSION = "1.0.1"; + public static final String VERSION = "2.0.0"; } diff --git a/library/src/main/java/com/qiniu/android/dns/http/DnspodEnterprise.java b/library/src/main/java/com/qiniu/android/dns/http/DnspodEnterprise.java deleted file mode 100644 index 023e2ea..0000000 --- a/library/src/main/java/com/qiniu/android/dns/http/DnspodEnterprise.java +++ /dev/null @@ -1,122 +0,0 @@ -package com.qiniu.android.dns.http; - -import com.qiniu.android.dns.Domain; -import com.qiniu.android.dns.IResolver; -import com.qiniu.android.dns.NetworkInfo; -import com.qiniu.android.dns.Record; -import com.qiniu.android.dns.util.Hex; - -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.net.HttpURLConnection; -import java.net.URL; -import java.nio.charset.Charset; - -import javax.crypto.Cipher; -import javax.crypto.spec.SecretKeySpec; - -/** - * Created by bailong on 15/7/22. - */ -public final class DnspodEnterprise implements IResolver { - private static final Charset UTF_8 = Charset.forName("UTF-8"); - - private final String id; - private final String ip; - private final SecretKeySpec key; - private final int timeout; - - public DnspodEnterprise(String id, String key, String ip) { - this(id, key, ip, DNS_DEFAULT_TIMEOUT); - } - - public DnspodEnterprise(String id, String key, String ip, int timeout) { - this.id = id; - this.ip = ip; - this.timeout = timeout; - byte[] k = key.getBytes(UTF_8); - this.key = new SecretKeySpec(k, "DES"); - } - - public DnspodEnterprise(String id, String key) { - this(id, key, "119.29.29.29"); - } - - @Override - public Record[] resolve(Domain domain, NetworkInfo info) throws IOException { - URL url = new URL("http://" + ip + "/d?ttl=1&dn=" + encrypt(domain.domain) - + "&id=" + id); - - HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); - httpConn.setConnectTimeout(3000); - httpConn.setReadTimeout(timeout * 1000); - int responseCode = httpConn.getResponseCode(); - if (responseCode != HttpURLConnection.HTTP_OK) { - return null; - } - - int length = httpConn.getContentLength(); - if (length <= 0 || length > 1024) { - return null; - } - InputStream is = httpConn.getInputStream(); - byte[] data = new byte[length]; - int read = is.read(data); - is.close(); - if (read <= 0) { - return null; - } - String response = new String(data, 0, read); - String result = decrypt(response); - String[] r1 = result.split(","); - if (r1.length != 2) { - return null; - } - int ttl; - try { - ttl = Integer.parseInt(r1[1]); - } catch (Exception e) { - return null; - } - String[] ips = r1[0].split(";"); - if (ips.length == 0) { - return null; - } - Record[] records = new Record[ips.length]; - long time = System.currentTimeMillis() / 1000; - for (int i = 0; i < ips.length; i++) { - records[i] = new Record(ips[i], Record.TYPE_A, ttl, time, Record.Source.DnspodEnterprise); - } - return records; - } - - private String encrypt(String domain) { - try { - Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); - cipher.init(Cipher.ENCRYPT_MODE, key); - byte[] encryptedString = cipher.doFinal(domain.getBytes(UTF_8)); - return Hex.encodeHexString(encryptedString) + "&id=" + id; - - } catch (Exception e) { - e.printStackTrace(); - } - - return ""; - } - - private String decrypt(String data) { - try { - Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); - cipher.init(Cipher.DECRYPT_MODE, key); - byte[] decrypted = cipher.doFinal(Hex.decodeHex(data.toCharArray())); - - return new String(decrypted); - - } catch (Exception e) { - e.printStackTrace(); - } - - return ""; - } -} diff --git a/library/src/main/java/com/qiniu/android/dns/util/BitSet.java b/library/src/main/java/com/qiniu/android/dns/util/BitSet.java deleted file mode 100644 index 48dc1c6..0000000 --- a/library/src/main/java/com/qiniu/android/dns/util/BitSet.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.qiniu.android.dns.util; - -/** - * Created by bailong on 15/6/16. - */ -public final class BitSet { - private int set; - - public BitSet() { - set = 0; - } - - public BitSet set(int bitIndex) { - set |= (1 << bitIndex); - return this; - } - - public boolean isSet(int index) { - return (set & (1 << index)) != 0; - } - - public boolean noneIsSet(int index) { - return set == 0; - } - - // 30 bits - public boolean allIsSet(int index) { - return (set + 1) == (1 << index); - } - - public int leadingZeros() { - int y; - int n = 32; - y = set >> 16; - if (y != 0) { - n = n - 16; - set = y; - } - y = set >> 8; - if (y != 0) { - n = n - 8; - set = y; - } - y = set >> 4; - if (y != 0) { - n = n - 4; - set = y; - } - y = set >> 2; - if (y != 0) { - n = n - 2; - set = y; - } - y = set >> 1; - if (y != 0) { - return n - 2; - } - - return n - set; - } - - public BitSet clear() { - set = 0; - return this; - } - - public int value() { - return set; - } -} diff --git a/library/src/main/java/com/qiniu/android/dns/util/DES.java b/library/src/main/java/com/qiniu/android/dns/util/DES.java deleted file mode 100644 index 778da69..0000000 --- a/library/src/main/java/com/qiniu/android/dns/util/DES.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.qiniu.android.dns.util; - -import java.nio.charset.Charset; - -import javax.crypto.Cipher; -import javax.crypto.SecretKeyFactory; -import javax.crypto.spec.DESKeySpec; - -public class DES { - /** - * Convert data to encrypted hex string - * @param data data to encrypt - * @param key encrypt key - * @return hex string - */ - public static String encrypt(String data, String key) { - try { - Cipher c = Cipher.getInstance("DES/ECB/PKCS5Padding"); - c.init(Cipher.ENCRYPT_MODE, SecretKeyFactory.getInstance("DES").generateSecret(new DESKeySpec(key.getBytes()))); - return Hex.encodeHexString(c.doFinal(data.getBytes())); - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - /** - * Convert encrypted hex string to UTF-8 string - * @param data data to decrypt - * @param key decrypt key - * @return UTF-8 string - */ - public static String decrypt(String data, String key) { - try { - Cipher c = Cipher.getInstance("DES/ECB/PKCS5Padding"); - c.init(Cipher.DECRYPT_MODE, SecretKeyFactory.getInstance("DES").generateSecret(new DESKeySpec(key.getBytes()))); - return new String(c.doFinal(Hex.decodeHex(data.toCharArray())), Charset.defaultCharset()); - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } -} diff --git a/library/src/main/java/com/qiniu/android/dns/util/MD5.java b/library/src/main/java/com/qiniu/android/dns/util/MD5.java deleted file mode 100644 index 2dfb85e..0000000 --- a/library/src/main/java/com/qiniu/android/dns/util/MD5.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.qiniu.android.dns.util; - -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; - -public class MD5 { - public static String encrypt(String s) { - try { - MessageDigest digest = MessageDigest.getInstance("MD5"); - digest.update(s.getBytes()); - return Hex.encodeHexString(digest.digest()); - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - return null; - } -}