From 1323c0b3463c5486be9d5e5310782aeb9023697c Mon Sep 17 00:00:00 2001 From: JLChen <551775569@qq.com> Date: 星期一, 15 十一月 2021 11:31:56 +0800 Subject: [PATCH] 2021-11-15 1.更新 --- HDLSDK/hdl-common/build.gradle | 1 HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java | 49 +++++ HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java | 8 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java | 11 - HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkRequest.java | 41 +--- /dev/null | 86 --------- HDLSDK/hdl-connect/build.gradle | 6 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/utils/AesUtil.java | 155 ---------------- HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java | 2 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java | 70 +++++++ HDLSDK/app/src/main/java/com/hdl/hdlsdk/App.java | 10 + HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/config/AuthenticateConfig.java | 7 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java | 9 HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/ByteUtils.java | 17 + HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java | 14 - 15 files changed, 182 insertions(+), 304 deletions(-) diff --git a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/App.java b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/App.java index 86fe706..92aa5d2 100644 --- a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/App.java +++ b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/App.java @@ -1,9 +1,11 @@ package com.hdl.hdlsdk; import android.app.Application; +import android.util.Log; import com.hdl.sdk.common.HDLSdk; -import com.hdl.sdk.connect.HDLSocket; +import com.hdl.sdk.common.event.EventListener; +import com.hdl.sdk.connect.HDLLink; /** * Created by Tong on 2021/10/8. @@ -14,6 +16,12 @@ public void onCreate() { super.onCreate(); HDLSdk.getInstance().init(this); + HDLLink.getInstance().registerAllTopicsListener(new EventListener() { + @Override + public void onMessage(Object msg) { + Log.i("TAG", "AllTopicsListener onMessage: "+msg.toString()); + } + }); } @Override diff --git a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java index 8d89f55..be3022f 100644 --- a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java +++ b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java @@ -9,7 +9,6 @@ import androidx.recyclerview.widget.RecyclerView; import android.Manifest; -import android.app.Instrumentation; import android.os.Bundle; import android.util.Log; import android.view.View; @@ -17,24 +16,15 @@ import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.listener.OnItemClickListener; -import com.google.gson.JsonObject; import com.hdl.sdk.common.config.AuthenticateConfig; -import com.hdl.sdk.common.config.TopicConstant; -import com.hdl.sdk.common.utils.IdUtils; -import com.hdl.sdk.common.utils.IpUtils; -import com.hdl.sdk.connect.HDLAuthSocket; -import com.hdl.sdk.connect.HDLSocket; +import com.hdl.sdk.connect.socket.HDLAuthSocket; +import com.hdl.sdk.connect.socket.HDLSocket; import com.hdl.sdk.connect.bean.DeviceControlRequest; -import com.hdl.sdk.connect.bean.GatewaySearchBean; -import com.hdl.sdk.connect.bean.LinkRequest; import com.hdl.sdk.connect.protocol.LinkMessageDecoder; import com.hdl.sdk.connect.protocol.LinkMessageEncoder; -import com.hdl.sdk.socket.SocketBoot; import com.hdl.sdk.socket.SocketOptions; -import com.hdl.sdk.socket.client.UdpClient; import com.hdl.sdk.socket.codec.MessagePipeLine; -import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import java.util.Map; diff --git a/HDLSDK/hdl-common/build.gradle b/HDLSDK/hdl-common/build.gradle index 673c577..74fa10d 100644 --- a/HDLSDK/hdl-common/build.gradle +++ b/HDLSDK/hdl-common/build.gradle @@ -31,4 +31,5 @@ api 'com.google.code.gson:gson:2.8.8' api 'androidx.annotation:annotation:1.2.0' api 'androidx.collection:collection:1.1.0' +// api project(path: ':hdl-connect') } \ No newline at end of file diff --git a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/config/AuthenticateConfig.java b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/config/AuthenticateConfig.java index d13aa2c..0090c94 100644 --- a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/config/AuthenticateConfig.java +++ b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/config/AuthenticateConfig.java @@ -4,8 +4,6 @@ import com.hdl.sdk.common.utils.SPUtils; -import static com.hdl.sdk.common.config.TopicConstant.DEIVCE_AUTH_REQUEST; -import static com.hdl.sdk.common.config.TopicConstant.GATEWAY_SEARCH; /** * Created by jlchen on 11/11/21. @@ -118,8 +116,9 @@ */ public boolean ifNeedEncrypt(String topicStr){ //杩囨护鐩稿叧闇�瑕佸姞瀵嗙殑涓婚 - return (!topicStr.contains(DEIVCE_AUTH_REQUEST) //鍏ョ綉璁よ瘉 - && !topicStr.contains(GATEWAY_SEARCH) //鎼滅储缃戝叧涓婚 + return (!topicStr.contains(TopicConstant.GATEWAY_AUTH_BROADCAST) //缃戝叧骞挎挱鍏ョ綉鎸囦护 + && !topicStr.contains(TopicConstant.DEIVCE_AUTH_REQUEST) //鍏ョ綉璁よ瘉 + && !topicStr.contains(TopicConstant.GATEWAY_SEARCH) //鎼滅储缃戝叧涓婚 && isLocalEncrypt//鍚敤鍔犲瘑鏍囧織 ); } diff --git a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java index b17b3a8..d1b24ec 100644 --- a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java +++ b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java @@ -18,6 +18,8 @@ */ public class EventDispatcher { + private static final List<EventListener> ALL_TOPICS_EVENT = new ArrayList<>();//鎵�鏈変富棰樻秷鎭� + private static final ArrayMap<Object, List<EventListener>> EVENT = new ArrayMap<>(); private static final ArrayMap<EventListener, Integer> TYPE = new ArrayMap<>(); @@ -100,6 +102,7 @@ }); } + public synchronized void post(Object tag, @NonNull Object o) { if (EVENT.containsKey(tag)) { List<EventListener> list = EVENT.get(tag); @@ -116,9 +119,55 @@ } } } + //鎵�鏈変富棰樼殑Listener閫氱煡 + if (ALL_TOPICS_EVENT != null && !ALL_TOPICS_EVENT.isEmpty()) { + for (EventListener listener : ALL_TOPICS_EVENT) { + ThreadToolUtils.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + if (listener != null) { + listener.onMessage(o); + } + } + }); + } + } + } + + /** + * 娉ㄥ唽鎵�鏈変富棰樻秷鎭殑鐩戝惉 + * @param listener + */ + public synchronized void registerAllTopicsListener(EventListener listener) { + if (ALL_TOPICS_EVENT != null && !ALL_TOPICS_EVENT.contains(listener)) { + ALL_TOPICS_EVENT.add(listener); + } + TYPE.put(listener, MAIN_TYPE); + } + + /** + * 鍙栨秷鎵�鏈変富棰樻秷鎭殑鐩戝惉 + * @param listener + */ + public synchronized void removeAllTopicsListener(EventListener listener) { + ioThread.execute(new Runnable() { + @Override + public void run() { + try { + if (ALL_TOPICS_EVENT != null && !ALL_TOPICS_EVENT.isEmpty()) { + TYPE.remove(listener); + ALL_TOPICS_EVENT.remove(listener); + } + } catch (Exception ignored) { + + } + + } + }); } public synchronized void clear() { + ALL_TOPICS_EVENT.clear(); EVENT.clear(); TYPE.clear(); } diff --git a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/ByteUtils.java b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/ByteUtils.java index ff641db..b893d1d 100644 --- a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/ByteUtils.java +++ b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/ByteUtils.java @@ -1,5 +1,6 @@ package com.hdl.sdk.common.utils; +import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -131,4 +132,20 @@ } return -1; } + + /** + * 瀛楃涓瞭o Bytes + * @param str 瀛楃涓� + * @return + */ + public static byte[] stringToBytes(String str) { + try { + // 浣跨敤鎸囧畾鐨勫瓧绗﹂泦灏嗘瀛楃涓茬紪鐮佷负byte搴忓垪骞跺瓨鍒颁竴涓猙yte鏁扮粍涓� + return str.getBytes("utf-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return new byte[]{}; + } + } diff --git a/HDLSDK/hdl-connect/build.gradle b/HDLSDK/hdl-connect/build.gradle index 7a4df3a..ac8608f 100644 --- a/HDLSDK/hdl-connect/build.gradle +++ b/HDLSDK/hdl-connect/build.gradle @@ -32,7 +32,7 @@ implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.3.0' - //鍔犲瘑 - implementation 'cn.hutool:hutool-all:5.6.5' - implementation 'org.bouncycastle:bcprov-jdk15on:1.60' +// //鍔犲瘑 +// implementation 'cn.hutool:hutool-all:5.6.5' +// implementation 'org.bouncycastle:bcprov-jdk15on:1.60' } \ No newline at end of file diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java new file mode 100644 index 0000000..e259914 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java @@ -0,0 +1,70 @@ +package com.hdl.sdk.connect; + +import com.hdl.sdk.common.config.AuthenticateConfig; +import com.hdl.sdk.common.event.EventDispatcher; +import com.hdl.sdk.common.event.EventListener; +import com.hdl.sdk.connect.bean.AuthenticateRequest; +import com.hdl.sdk.connect.socket.HDLAuthSocket; + +/** + * Created by jlchen on 11/15/21. + * + * @Description : HDLLink + */ +public class HDLLink { + /** + * instance + */ + private volatile static HDLLink instance; + /** + * getInstance + * + * @return HDLLink + */ + public static synchronized HDLLink getInstance() { + if (instance == null) { + synchronized (HDLLink.class) { + if (instance == null) { + instance = new HDLLink(); + } + } + } + return instance; + } + + /** + * 娉ㄥ唽鎵�鏈変富棰樻秷鎭殑鐩戝惉 + * @param listener + */ + public synchronized void registerAllTopicsListener(EventListener listener){ + EventDispatcher.getInstance().registerAllTopicsListener(listener); + } + /** + * 鍙栨秷鎵�鏈変富棰樻秷鎭殑鐩戝惉 + * @param listener + */ + public synchronized void removeAllTopicsListener(EventListener listener) { + EventDispatcher.getInstance().removeAllTopicsListener(listener); + } + + /** + * 妫�娴嬫槸鍚﹀凡缁忚璇佽繃 + * 璁よ瘉閫氳繃鎵嶈兘杩涜璁惧鎺у埗 + * @return + */ + public boolean checkIfCertified(){ + return AuthenticateConfig.getInstance().checkIfCertified(); + } + + /** + * 鍙戦�佸叆缃戝強璁よ瘉璇锋眰 + * + * @param ip 缃戝叧IP + * @param request 璁よ瘉璇锋眰淇℃伅 + * @param callBack 缁撴灉鍥炶皟 + */ + public void sendAuthenticateRequest(String ip, AuthenticateRequest request, HDLAuthSocket.CallBack callBack) { + HDLAuthSocket.getInstance().sendAuthenticateRequest(ip,request,callBack); + } + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkRequest.java index 29b1941..d3c9c7e 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkRequest.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkRequest.java @@ -1,18 +1,16 @@ package com.hdl.sdk.connect.bean; import android.text.TextUtils; -import android.util.Log; import androidx.annotation.NonNull; import com.hdl.sdk.common.config.AuthenticateConfig; +import com.hdl.sdk.common.utils.ByteUtils; import com.hdl.sdk.connect.utils.AESUtils; import com.hdl.sdk.connect.utils.AesUtil; import java.io.UnsupportedEncodingException; - -import static com.hdl.sdk.common.config.TopicConstant.DEIVCE_AUTH_REQUEST; -import static com.hdl.sdk.common.config.TopicConstant.GATEWAY_SEARCH; +//import com.hdl.sdk.connect.utils.AesUtil; /** * Created by Tong on 2021/9/29. @@ -47,7 +45,6 @@ this.data = data; if (!TextUtils.isEmpty(data)) { setLength(getBytesLength(data)); -// setLength(data.length()); } else { setLength(0); } @@ -74,32 +71,13 @@ getData(); } - private static byte[] stringToBytes(String str) { - try { - // 浣跨敤鎸囧畾鐨勫瓧绗﹂泦灏嗘瀛楃涓茬紪鐮佷负byte搴忓垪骞跺瓨鍒颁竴涓猙yte鏁扮粍涓� - return str.getBytes("utf-8"); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - return new byte[]{}; - } + private int getBytesLength(String str){ - return stringToBytes(str).length; + return ByteUtils.stringToBytes(str).length; } - /** - * 鍚堝苟鏁扮粍 - * @param bt1 - * @param bt2 - * @return - */ - public static byte[] byteMerger(byte[] bt1, byte[] bt2){ - byte[] bt3 = new byte[bt1.length + bt2.length]; - System.arraycopy(bt1, 0, bt3, 0, bt1.length); - System.arraycopy(bt2, 0, bt3, bt1.length, bt2.length); - return bt3; - } + /** * 鑾峰彇鍙戦�佹暟鎹産yte * @@ -110,11 +88,12 @@ //鍒ゆ柇鏄惁闇�瑕佸姞瀵� if (AuthenticateConfig.getInstance().ifNeedEncrypt(topic)) { //闇�瑕佸姞瀵� - byte[] dataBytes = AesUtil.aesEncrypt(stringToBytes(data), AuthenticateConfig.getInstance().getLocalSecret()); + byte[] dataBytes = AesUtil.aesEncrypt(ByteUtils.stringToBytes(data), AuthenticateConfig.getInstance().getLocalSecret()); +// byte[] dataBytes = AESUtils.encryptAES(stringToBytes(data), AuthenticateConfig.getInstance().getLocalSecret()); + String headString = "Topic:" + getTopic() + "\r\n" + "Length:" + dataBytes.length + "\r\n" + "\r\n"; -// byte[] headBytes = headString.getBytes("utf-8"); - byte[] headBytes = headString.getBytes(); - byte[] sendBytes = byteMerger(headBytes, dataBytes); + byte[] headBytes = headString.getBytes("utf-8"); + byte[] sendBytes = ByteUtils.concatBytes(headBytes, dataBytes); return sendBytes; } else { return this.toString().getBytes("utf-8"); diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java index 5047ae0..8ffe79a 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java @@ -1,12 +1,11 @@ package com.hdl.sdk.connect.protocol; -import android.util.Log; - import com.hdl.sdk.common.config.AuthenticateConfig; import com.hdl.sdk.common.event.EventDispatcher; import com.hdl.sdk.common.utils.ByteUtils; import com.hdl.sdk.connect.bean.LinkResponse; +import com.hdl.sdk.connect.utils.AESUtils; import com.hdl.sdk.connect.utils.AesUtil; import com.hdl.sdk.connect.utils.ProtocolParse; import com.hdl.sdk.socket.codec.ByteToMessageDecoder; @@ -64,13 +63,12 @@ if(AuthenticateConfig.getInstance().ifNeedEncrypt(response.getTopic())){ //闇�瑕佽В瀵� byte[] bodyBytes = AesUtil.aesDecrypt(body,AuthenticateConfig.getInstance().getLocalSecret()); +// byte[] bodyBytes = AESUtils.decryptAES(body,AuthenticateConfig.getInstance().getLocalSecret()); response.setData(new String(bodyBytes, "utf-8")); - Log.i("TAG", "decoder: "); +// Log.i("TAG", "瑙e瘑 涓婚锛�"+response.getTopic()+ " body: "+response.getData()); }else{ response.setData(new String(body, "utf-8")); } - - if (byteArray.length >= bodyLength + bodyStartIndex) { //淇濆瓨浣欑暀 diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLAuthSocket.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java similarity index 98% rename from HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLAuthSocket.java rename to HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java index 6e9f14a..3f5e5b6 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLAuthSocket.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java @@ -1,4 +1,4 @@ -package com.hdl.sdk.connect; +package com.hdl.sdk.connect.socket; import android.text.TextUtils; import android.util.Log; @@ -267,9 +267,9 @@ String topic = String.format(TopicConstant.PROPERTY_DOWN, "1406844230123372545"); LinkRequest message = new LinkRequest(topic, - GsonConvert.getGson().toJson(request)); + GsonConvert.getGson().toJson(data)); - Log.i("TAG", "propertyDown: " + message.getData()); +// Log.i("TAG", "propertyDown: " + message.toString()); String ip = IpUtils.getBroadcastAddress(); HdlSocketHelper.send(getUdpBoot(ip), message, null); @@ -299,4 +299,7 @@ return hex.toString(); } + + + } diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLSocket.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java similarity index 97% rename from HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLSocket.java rename to HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java index 22b1dbe..7c94a2f 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLSocket.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java @@ -1,11 +1,7 @@ -package com.hdl.sdk.connect; +package com.hdl.sdk.connect.socket; import android.text.TextUtils; -import android.util.ArrayMap; -import android.util.Log; -import com.google.gson.Gson; -import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import com.hdl.sdk.common.config.TopicConstant; @@ -16,8 +12,6 @@ import com.hdl.sdk.common.utils.SPUtils; import com.hdl.sdk.common.utils.ThreadToolUtils; import com.hdl.sdk.common.utils.gson.GsonConvert; -import com.hdl.sdk.connect.bean.AuthenticateRequest; -import com.hdl.sdk.connect.bean.BaseLocalRequest; import com.hdl.sdk.connect.bean.BaseLocalResponse; import com.hdl.sdk.connect.bean.DeviceControlRequest; import com.hdl.sdk.connect.bean.FunctionAttributeRequest; @@ -37,11 +31,8 @@ import com.hdl.sdk.socket.listener.SendListener; import java.io.UnsupportedEncodingException; -import java.lang.reflect.ParameterizedType; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.ExecutionException; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HdlSocketHelper.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java similarity index 98% rename from HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HdlSocketHelper.java rename to HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java index dc05bb6..53ef271 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HdlSocketHelper.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java @@ -1,4 +1,4 @@ -package com.hdl.sdk.connect; +package com.hdl.sdk.connect.socket; import android.text.TextUtils; diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/utils/AESUtils.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/utils/AESUtils.java deleted file mode 100644 index 1a577e0..0000000 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/utils/AESUtils.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.hdl.sdk.connect.utils; - -import android.util.Base64; - -import java.io.UnsupportedEncodingException; -import java.security.InvalidAlgorithmParameterException; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; - -import javax.crypto.BadPaddingException; -import javax.crypto.Cipher; -import javax.crypto.IllegalBlockSizeException; -import javax.crypto.NoSuchPaddingException; -import javax.crypto.spec.IvParameterSpec; -import javax.crypto.spec.SecretKeySpec; - -/** - * Created by Tong on 2021/11/3. - */ -public class AESUtils { - - public static String encryptAES(String content, String key) throws NoSuchPaddingException, BadPaddingException, InvalidAlgorithmParameterException, NoSuchAlgorithmException, IllegalBlockSizeException, UnsupportedEncodingException, InvalidKeyException { - return encryptAES(content, key, ""); - } - - public static String encryptAES(String content, String key, String ivString) - throws InvalidKeyException, NoSuchAlgorithmException, - NoSuchPaddingException, UnsupportedEncodingException, - InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { - byte[] byteContent = content.getBytes("UTF-8"); - byte[] encryptedBytes = encryptAES(byteContent,key,ivString); - return Base64.encodeToString(encryptedBytes, Base64.NO_WRAP); - } - - public static byte[] encryptAES(byte[] byteContent, String key) throws NoSuchPaddingException, BadPaddingException, InvalidAlgorithmParameterException, NoSuchAlgorithmException, IllegalBlockSizeException, UnsupportedEncodingException, InvalidKeyException { - return encryptAES(byteContent, key, key); - } - - public static byte[] encryptAES(byte[] byteContent, String key, String ivString) - throws InvalidKeyException, NoSuchAlgorithmException, - NoSuchPaddingException, UnsupportedEncodingException, - InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { - - byte[] enCodeFormat = key.getBytes(); - SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES"); - - byte[] initParam = ivString.getBytes(); - IvParameterSpec ivParameterSpec = new IvParameterSpec(initParam); - - // 鎸囧畾鍔犲瘑鐨勭畻娉曘�佸伐浣滄ā寮忓拰濉厖鏂瑰紡 - Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); - cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec); - - byte[] encryptedBytes = cipher.doFinal(byteContent); - return encryptedBytes; - } - - public static String decryptAES(String content, String key) throws NoSuchPaddingException, UnsupportedEncodingException, InvalidAlgorithmParameterException, NoSuchAlgorithmException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException { - return decryptAES(content, key, ""); - } - - public static String decryptAES(String content, String key, String ivString) - throws InvalidKeyException, NoSuchAlgorithmException, - NoSuchPaddingException, InvalidAlgorithmParameterException, - IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException { - - - // base64 瑙g爜 - byte[] encryptedBytes = Base64.decode(content, Base64.NO_WRAP); - - byte[] enCodeFormat = key.getBytes(); - SecretKeySpec secretKey = new SecretKeySpec(enCodeFormat, "AES"); - - byte[] initParam = ivString.getBytes(); - IvParameterSpec ivParameterSpec = new IvParameterSpec(initParam); - - Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); - cipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpec); - - byte[] result = cipher.doFinal(encryptedBytes); - - return new String(result, "UTF-8"); - } - -} - diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/utils/AesUtil.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/utils/AesUtil.java index 00f83b7..f05ba51 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/utils/AesUtil.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/utils/AesUtil.java @@ -3,22 +3,16 @@ import com.hdl.sdk.common.utils.LogUtils; -import org.bouncycastle.jce.provider.BouncyCastleProvider; - import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.Key; import java.security.NoSuchAlgorithmException; -import java.security.Security; - import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; - -import cn.hutool.core.util.HexUtil; /** * Aes 鍔犺В瀵嗗伐鍏风被 @@ -28,13 +22,13 @@ */ public class AesUtil { - private static final String CIPHER_INSTANCE = "AES/ECB/PKCS5Padding"; + private static final String CIPHER_INSTANCE = "AES/CBC/PKCS7Padding"; private static final String AES_ALGORITHM = "AES"; - static { - //AES/CBC/PKCS7Padding 渚濊禆 - Security.addProvider(new BouncyCastleProvider()); - } +// static { +// //AES/CBC/PKCS7Padding 渚濊禆 +// Security.addProvider(new BouncyCastleProvider()); +// } /** * AES鍔犲瘑 @@ -44,7 +38,7 @@ * @throws Exception */ public static byte[] aesEncrypt(byte[] content, String key) { - return encrypt(content, key.getBytes(), "AES/CBC/PKCS7Padding", true, null); + return encrypt(content, key.getBytes(), CIPHER_INSTANCE, true, null); } /** @@ -55,52 +49,9 @@ * @throws Exception */ public static byte[] aesDecrypt(byte[] content, String key) { - return decrypt(content, key.getBytes(), "AES/CBC/PKCS7Padding", true, null); + return decrypt(content, key.getBytes(), CIPHER_INSTANCE, true, null); } - /** - * 鍔犲瘑 - * - * @param content 寰呭姞瀵嗗瓧绗︿覆 - * @param keyHex aesKye鐨刪exStr - * @return - */ - public static String encrypt(String content, String keyHex) { - return HexUtil.encodeHexStr(encrypt(content.getBytes(), HexUtil.decodeHex(keyHex), CIPHER_INSTANCE, false, null)); - } - - /** - * 鍔犲瘑 - * - * @param content 寰呭姞瀵嗗瓧绗︿覆 - * @param key 瀵嗛挜 - * @return - */ - public static String encrypt(String content, byte[] key) { - return HexUtil.encodeHexStr(encrypt(content.getBytes(), key, CIPHER_INSTANCE, false, null)); - } - - /** - * 鍔犲瘑 - * - * @param content 寰呭姞瀵嗗瓧绗︿覆 - * @param keyHex aesKye鐨刪exStr - * @return - */ - public static byte[] encryptReturnByte(String content, String keyHex) { - return encrypt(content.getBytes(), HexUtil.decodeHex(keyHex), CIPHER_INSTANCE, false, null); - } - - /** - * 鍔犲瘑 - * - * @param content 寰呭姞瀵嗗瓧绗︿覆 - * @param key 瀵嗛挜 - * @return - */ - public static byte[] encryptReturnByte(String content, byte[] key) { - return encrypt(content.getBytes(), key, CIPHER_INSTANCE, false, null); - } /** * 鍔犲瘑 @@ -149,51 +100,6 @@ /** * 瑙e瘑 * - * @param contentHex 寰呰В瀵嗗緟瀛楃涓瞙exStr - * @param keyHex desKye鐨刪exStr - * @return - */ - public static String decrypt(String contentHex, String keyHex) { - return new String(decrypt(HexUtil.decodeHex(contentHex), HexUtil.decodeHex(keyHex), CIPHER_INSTANCE, false, null)); - } - - /** - * 瑙e瘑 - * - * @param contentHex 寰呰В瀵嗗緟瀛楃涓瞙exStr - * @param key 瀵嗛挜 - * @return - */ - public static String decrypt(String contentHex, byte[] key) { - return new String(decrypt(HexUtil.decodeHex(contentHex), key, CIPHER_INSTANCE, false, null)); - } - - /** - * 瑙e瘑 - * - * @param content 寰呰В瀵嗗緟鍐呭 - * @param keyHex 瀵嗛挜 - * @return - */ - public static String decrypt(byte[] content, String keyHex) { - return new String(decrypt(content, HexUtil.decodeHex(keyHex), CIPHER_INSTANCE, false, null)); - } - - /** - * 瑙e瘑 - * - * @param content 寰呰В瀵嗗緟鍐呭 - * @param key 瀵嗛挜 - * @return - */ - public static String decrypt(byte[] content, byte[] key) { - return new String(decrypt(content, key, CIPHER_INSTANCE, false, null)); - } - - - /** - * 瑙e瘑 - * * @param contentByte 寰呰В瀵嗗緟瀛楃涓瞙exStr * @param contentByte 瀵嗛挜 * @param cipherInstance AES绠楁硶濉厖鏂瑰紡 @@ -235,51 +141,4 @@ return null; } - - public static void main(String[] args) { -// jiemi(); - //jiami(); - } - - public static void jiami() { - String key = "1f6714fc-fb9b-4a"; - String content = "{\"id\":\"123\",\"objects\":[{\"sid\":\"0001011565879801020200010101\",\"type\":\"PWD\",\"local_id\":\"2\"}],\"time_stamp\":\"1603281282000\"}"; - byte[] res = aesEncrypt(content.getBytes(), key); - System.out.println(HexUtil.encodeHexStr(res)); - } - -// /** -// * -// * @param str -// * @param houseId -// * @return -// */ -// public static String jiemi(byte[] str, String houseId) { -// byte[] rs = aesDecrypt(str, HouseIdSecretUtil.getSecret(houseId)); -// String content = new String(rs); -// return content; -// } - -// public static void main(String[] args) { -// try { -// //绗竴姝ワ細 鐢熸垚KEY -// //KeyGenerator keyGenerator = KeyGenerator.getInstance(AES_ALGORITHM); -// //keyGenerator.init(256); -// //绗簩姝ワ細 浜х敓瀵嗛挜 -// //SecretKey secretKey = keyGenerator.generateKey(); -// //绗笁姝ワ細 鑾峰彇瀵嗛挜 -// //byte[] keyBytes = secretKey.getEncoded(); -// //System.out.println(byteArrayToHexStr(keyBytes)); -// String src = "aaaaaaaaaVVVVaaaAAAA鏃�"; -// String pwd = "41151AF257BFDB7859EEC62FB341EE95EE42E648FE24E1F8CE8DADE287CC1E5C"; -// String mw = encrypt(src,pwd); -// System.out.println("mw:"+mw); -// String jm = decrypt(mw,pwd); -// System.out.println("jm:"+jm); -// -// }catch (Exception e){ -// -// } -// -// } } -- Gitblit v1.8.0