diff --git a/libraries/mogo-adas/README.md b/libraries/mogo-adas/README.md index 6c2da02ada..d8f81fc2da 100644 --- a/libraries/mogo-adas/README.md +++ b/libraries/mogo-adas/README.md @@ -1,3 +1,14 @@ #### 说明 # ADAS LIB -## 与工控机交互LIB \ No newline at end of file +## 与工控机交互LIB +RSA密钥 +privateBase64=MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEA127FFvuPolaxYTBg5wkyDIrEbcNKXoIjf0bK7QUQ991Lsbv5Ktv/XM2F6qJFssVF1KTkStVBSQGxJB1eZLwJEwIDAQABAkBM39AgpV/Z1Amz3qmVh+h+JT521ItDMjksf7yF25r0dzGjOfGLQmMAqQXT68B+cQX5HSoFMwk/rE1hnXgifyNBAiEA6uNE2TfPj51mPOZztGy1Q8p4exWohfotiy64g/CyVeMCIQDqy9e7bGeZEi6p1zemEgFVtwgZZvLn/BOP4UO7NjJnEQIhAJBnprUwha/SYb+BIpNC3fHOcWGigBfWJdfSomejO9BnAiEApfojLqKbOWHZCsbQ19yyhN02JH7aB5PyYCtlrdnKF4ECIHR1P2LOQLddXO8PwgoF6gtCTO2sxIqdvu8fUruWyouQ +publicBase64=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANduxRb7j6JWsWEwYOcJMgyKxG3DSl6CI39Gyu0FEPfdS7G7+Srb/1zNheqiRbLFRdSk5ErVQUkBsSQdXmS8CRMCAwEAAQ== + +工控机SSH +账号:titan +密码:mogo@ZHIDAO10 + +加密后的密码:Lz71dnr3eEbcXbuRqSBuLPTk9N7vfqL1lkV1FvAzrLE45OslTvAmm0ekjXIuvOz3jw4hh/saV5pxc3ywNubnjQ== + + diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java index ad481f529f..9cf773df5e 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java @@ -9,7 +9,6 @@ import android.util.Log; import com.google.gson.Gson; import com.google.protobuf.InvalidProtocolBufferException; -import com.jcraft.jsch.JSchException; import com.zhidao.support.adas.high.bean.AdasConfig; import com.zhidao.support.adas.high.bean.AutopilotControl; import com.zhidao.support.adas.high.bean.AutopilotSpeedParam; @@ -26,6 +25,7 @@ import com.zhidao.support.adas.high.common.AppPreferenceHelper; import com.zhidao.support.adas.high.common.Constants; import com.zhidao.support.adas.high.common.CupidLogUtils; import com.zhidao.support.adas.high.common.MgContextUtils; +import com.zhidao.support.adas.high.common.RSATool; import com.zhidao.support.adas.high.common.SSH; import com.zhidao.support.adas.high.common.ThreadPoolManager; import com.zhidao.support.adas.high.msg.MyMessageFactory; @@ -39,9 +39,9 @@ import com.zhidao.support.adas.high.udp.CupidUdpConstract; import com.zhidao.support.adas.high.udp.IConnectRtpListener; import com.zhidao.support.adas.high.udp.IGetH264Data; +import org.apache.commons.net.util.Base64; import org.json.JSONObject; -import java.io.IOException; import java.util.List; import mogo.webproto.WebsocketHeader; @@ -262,12 +262,15 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec @Override public void run() { ssh = new SSH(); + String encodePwd = "Lz71dnr3eEbcXbuRqSBuLPTk9N7vfqL1lkV1FvAzrLE45OslTvAmm0ekjXIuvOz3jw4hh/saV5pxc3ywNubnjQ=="; + String privateKey = "MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEA127FFvuPolaxYTBg5wkyDIrEbcNKXoIjf0bK7QUQ991Lsbv5Ktv/XM2F6qJFssVF1KTkStVBSQGxJB1eZLwJEwIDAQABAkBM39AgpV/Z1Amz3qmVh+h+JT521ItDMjksf7yF25r0dzGjOfGLQmMAqQXT68B+cQX5HSoFMwk/rE1hnXgifyNBAiEA6uNE2TfPj51mPOZztGy1Q8p4exWohfotiy64g/CyVeMCIQDqy9e7bGeZEi6p1zemEgFVtwgZZvLn/BOP4UO7NjJnEQIhAJBnprUwha/SYb+BIpNC3fHOcWGigBfWJdfSomejO9BnAiEApfojLqKbOWHZCsbQ19yyhN02JH7aB5PyYCtlrdnKF4ECIHR1P2LOQLddXO8PwgoF6gtCTO2sxIqdvu8fUruWyouQ"; try { - ssh.connect(ipAddr, 22, "titan", "mogo@ZHIDAO10"); - SSHResult result = ssh.exec(cmd, "mogo@ZHIDAO10"); + String pwd = RSATool.decodeByPrivateKey(encodePwd, Base64.decodeBase64(privateKey)); + ssh.connect(ipAddr, 22, "titan", pwd); + SSHResult result = ssh.exec(cmd, pwd); if (mAdasListener != null) mAdasListener.onSSHResult(result); - } catch (JSchException | IOException e) { + } catch (Exception e) { if (mAdasListener != null) mAdasListener.onSSHResult(new SSHResult(SSHResult.RESULT_CODE.ERROR, cmd, e.getMessage())); e.printStackTrace(); @@ -644,6 +647,15 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec // return sendWsMessage(Constants.QUERY_ROUTES); // } + /** + * 主动录制Bag包 + * + * @param isRecord + * @param type + * @param id + * @param duration + * @return + */ private boolean recordBag(boolean isRecord, int type, int id, int duration) { if (recordDataParam == null) { recordDataParam = new RecordDataParam(); diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/record/RecordCauseParam.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/record/RecordCauseParam.java index 750b884e43..2669464d61 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/record/RecordCauseParam.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/record/RecordCauseParam.java @@ -2,7 +2,7 @@ package com.zhidao.support.adas.high.bean.record; /** * @author song kenan - * @des + * @des 同步采集类型 * @date 2021/8/25 */ diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/RSATool.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/RSATool.java new file mode 100644 index 0000000000..443eaba2ba --- /dev/null +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/RSATool.java @@ -0,0 +1,108 @@ +package com.zhidao.support.adas.high.common; + +import android.util.Log; + +import org.apache.commons.net.util.Base64; + +import java.nio.charset.StandardCharsets; +import java.security.Key; +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.SecureRandom; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.HashMap; +import java.util.Map; + +import javax.crypto.Cipher; + +public class RSATool { + private static final String KEY_ALGORITHM = "RSA"; + private static final String ECB_PKCS1_PADDING = "RSA/ECB/PKCS1Padding"; + + public static Map initKey() throws Exception { + //实例化密钥生成器 + KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KEY_ALGORITHM); //加密方式 + //初始化密钥生成器 + keyPairGenerator.initialize(512, new SecureRandom()); //长度 + //生成密钥对 + KeyPair keyPair = keyPairGenerator.generateKeyPair(); + //甲方公钥 + RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); + //甲方私钥 + RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); + //将密钥存储在map中 + Map keyMap = new HashMap(); + keyMap.put("PUBLIC_KEY", publicKey); + keyMap.put("PRIVATE_KEY", privateKey); + return keyMap; + } + + public static void getBase64() { + try { + Map map = initKey(); + byte[] privateKey = ((Key) map.get("PRIVATE_KEY")).getEncoded(); + byte[] publicKey = ((Key) map.get("PUBLIC_KEY")).getEncoded(); + // 将公私钥转为base64-法1 +// String privateBase64 = new String(Base64.encodeBase64(privateKey)); +// String publicBase64 = new String(Base64.encodeBase64(publicKey)); + // 将公私钥转为base64-法2 + String privateBase64 = Base64.encodeBase64String(privateKey); + String publicBase64 = Base64.encodeBase64String(publicKey); + Log.i("RSATool", "privateBase64=" + privateBase64); + Log.i("RSATool", "publicBase64=" + publicBase64); + String data = "mogo@ZHIDAO10"; + String encryptData = encryptByPublicKey(data, publicKey); + Log.i("RSATool", "encryptData=" + encryptData); + String decodeData = decodeByPrivateKey(encryptData, Base64.decodeBase64(privateBase64)); + Log.i("RSATool", "decodeData=" + decodeData); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 公钥加密 + * + * @param data 待加密数据 + * @param key 密钥 + * @return String 加密数据 Base64类型 + */ + public static String encryptByPublicKey(String data, byte[] key) throws Exception { + //实例化密钥工厂 + KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); + //初始化公钥 + //密钥材料转换 + X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(key); + //产生公钥 + PublicKey pubKey = keyFactory.generatePublic(x509KeySpec); + //数据加密 + Cipher cipher = Cipher.getInstance(ECB_PKCS1_PADDING); + cipher.init(Cipher.ENCRYPT_MODE, pubKey); + return Base64.encodeBase64String(cipher.doFinal(data.getBytes(StandardCharsets.UTF_8))); + } + + /** + * 私钥解密 + * + * @param data 待解密数据 Base64类型 + * @param key 密钥 + * @return String 解密数据 + */ + public static String decodeByPrivateKey(String data, byte[] key) throws Exception { + //取得私钥 + PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(key); + KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); + //生成私钥 + PrivateKey privateKey = keyFactory.generatePrivate(pkcs8KeySpec); + //数据解密 + Cipher cipher = Cipher.getInstance(ECB_PKCS1_PADDING); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + return new String(cipher.doFinal(Base64.decodeBase64(data))); + } +}