From 2db1aa88e8ab53096a936163d686b90d8e056a99 Mon Sep 17 00:00:00 2001
From: rain <167982779@qq.com>
Date: Wed, 21 Aug 2024 23:18:33 +0800
Subject: [PATCH] 国土对接返回信息加密
---
src/main/java/com/dji/sample/droneairport/service/impl/RegistServiceImpl.java | 74 ++++++++++++++++++++++---------------
1 files changed, 44 insertions(+), 30 deletions(-)
diff --git a/src/main/java/com/dji/sample/droneairport/service/impl/RegistServiceImpl.java b/src/main/java/com/dji/sample/droneairport/service/impl/RegistServiceImpl.java
index 91959c0..da980ff 100644
--- a/src/main/java/com/dji/sample/droneairport/service/impl/RegistServiceImpl.java
+++ b/src/main/java/com/dji/sample/droneairport/service/impl/RegistServiceImpl.java
@@ -101,26 +101,31 @@
headers.set("x-lc-secret", enSM2);
// 构建请求实体
- HttpEntity<String> requestEntity = new HttpEntity<>(base64, headers);
- // 发送请求
- ResponseEntity<String> response = restTemplate.exchange(
- "https://xcx.geoway.com.cn:8033/v1/droneAirport/RegistService",
- HttpMethod.POST,
- requestEntity,
- String.class);
- HttpHeaders responseHeaders = response.getHeaders();
- String responseSecret = responseHeaders.getFirst("x-lc-secret");
+// HttpEntity<String> requestEntity = new HttpEntity<>(base64, headers);
+// // 发送请求
+// ResponseEntity<String> response = restTemplate.exchange(
+// "https://xcx.geoway.com.cn:8033/v1/droneAirport/RegistService",
+// HttpMethod.POST,
+// requestEntity,
+// String.class);
+// HttpHeaders responseHeaders = response.getHeaders();
+// String responseSecret = responseHeaders.getFirst("x-lc-secret");
- String data=deSM2(responseSecret, "00D631FD5615416EAB63D33A9E66E801F95DE840567504210080006081DE877AE3");
+ String data=deSM2(enSM2, "00D631FD5615416EAB63D33A9E66E801F95DE840567504210080006081DE877AE3");
// 使用 Hutool 的 JSONUtil 解析 JSON 字符串
- JSONObject jsonObject = JSONUtil.parseObj(response.getBody());
+// JSONObject jsonObject = JSONUtil.parseObj(response.getBody());
+
// 提取 data 字段的值
- String dataValue = jsonObject.getStr("data");
- return SM4Util.decrypt(data,dataValue);
+// String dataValue = jsonObject.getStr("data");
+
+// return SM4Util.decrypt(data,dataValue);
+ String text=SM4Util.decrypt(data,base64);
+ return SM4Util.decrypt(data,base64);
} catch (Exception e) {
+
// 异常处理
- throw new IllegalArgumentException("无人机机场注册失败: " + e.getMessage());
+ return(e.getMessage());
}
}
@@ -149,14 +154,14 @@
DeviceExpanSionEntity drone = expanSionMapper.selectOne(new LambdaQueryWrapper<DeviceExpanSionEntity>()
.eq(DeviceExpanSionEntity::getWorkspaceId, workspaceId)
.eq(DeviceExpanSionEntity::getType, 1));
+ registPort(airport);
AddDeviceDto dto = deviceEntityToDto(drone);
String secret = SM4Util.generateSM4Key();
// 构建请求体
String jsonBody = buildRequestBody(dto);
String base64 = SM4Util.encrypt(secret, jsonBody);
- String keys=Utils.encrypt(secret,"04225AACF606D800EA3C2C31FCF8FB161B15F7A8D0460DEB91013D4F228C455E76A2ED8D71BC6525B5DC5CC015C155479D8839950344AEE438A3A6305C90F8269F");
+ String keys=Utils.encrypt(secret,"04CF7CAE31B5130D1D5D1AC1DC2778D94533868A8D57FC02BBD97B688E07145DAAA96462DC83D9F348261F738D51C049770C43BA53B584917C9E30C6221B737CDD");
String enSM2=Utils.hexToBase64(keys);
-// registPort(airport);
// 设置请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
@@ -176,9 +181,7 @@
String.class);
HttpHeaders responseHeaders = response.getHeaders();
String responseSecret = responseHeaders.getFirst("x-lc-secret");
-
String data=deSM2(responseSecret, "00D631FD5615416EAB63D33A9E66E801F95DE840567504210080006081DE877AE3");
-
// 使用 Hutool 的 JSONUtil 解析 JSON 字符串
JSONObject jsonObject = JSONUtil.parseObj(response.getBody());
// 提取 data 字段的值
@@ -186,14 +189,14 @@
return SM4Util.decrypt(data,dataValue);
} catch (Exception e) {
// 异常处理
- return ("无人机机场设备注册失败: " + e.getMessage());
+ return (e.getMessage());
}
}
@Override
public Map<String, String> getDroneState(String deviceId) throws Exception {
String key = SM4Util.generateSM4Key();
- String secret = Utils.encrypt(key, "04225AACF606D800EA3C2C31FCF8FB161B15F7A8D0460DEB91013D4F228C455E76A2ED8D71BC6525B5DC5CC015C155479D8839950344AEE438A3A6305C90F8269F");
+ String secret = Utils.encrypt(key, "04CF7CAE31B5130D1D5D1AC1DC2778D94533868A8D57FC02BBD97B688E07145DAAA96462DC83D9F348261F738D51C049770C43BA53B584917C9E30C6221B737CDD");
DroneStateDto data = getAirportFromCache(deviceId);
String json = JSON.toJSONString(data);
String SM4Screct = SM4Util.encrypt(key, json);
@@ -268,15 +271,20 @@
@Override
public Map<String, String> AddTask(String base64, String Secret, String username) throws Exception {
ReturnTaskParam param = new ReturnTaskParam();
+ //获取SM4密钥
String secret = SM4Util.generateSM4Key();
- String retse = Utils.encrypt(secret, "04225AACF606D800EA3C2C31FCF8FB161B15F7A8D0460DEB91013D4F228C455E76A2ED8D71BC6525B5DC5CC015C155479D8839950344AEE438A3A6305C90F8269F");
+ //对SM4密钥进行SM2加密
+ String retse = Utils.encrypt(secret, "04CF7CAE31B5130D1D5D1AC1DC2778D94533868A8D57FC02BBD97B688E07145DAAA96462DC83D9F348261F738D51C049770C43BA53B584917C9E30C6221B737CDD");
String taskId = UUID.randomUUID().toString();
String traceid = UUID.randomUUID().toString();
+ //通过SM2私钥解密请求头里的secret获取SM4密钥
String sm4Secrect = deSM2(Secret, "00D631FD5615416EAB63D33A9E66E801F95DE840567504210080006081DE877AE3");
+ //使用从请求头里获取的SM4密钥解析请求参数
String decryptedJson = SM4Util.decrypt(sm4Secrect, base64);
JSONObject jsonObject = new JSONObject(decryptedJson);
AddTaskDto addTaskDto = jsonToDto(jsonObject);
TaskInfo taskInfo = new TaskInfo();
+ //获取设备Id
List<String> listx = convertStringToList(addTaskDto.getDeviceid());
taskInfo.setId(traceid);
taskInfo.setTaskId(taskId);
@@ -292,6 +300,7 @@
for (TaskListDto taskListDto : tasklist) {
LotInfo lotInfo = convertToLotInfo(taskListDto);
lotInfo.setTaskId(taskId);
+ //
lotInfo.setType(1);
lotInfo.setTaskName(addTaskDto.getBizidname());
lotInfo.setUserName(username);
@@ -315,8 +324,8 @@
String waylineName = TimerUtil.getTimeName();
MultipartFile multipartFile = timerUtil.getFile(waylineName, lotInfosForAirport, airport.getLat(), airport.getLon());
WaylineFileEntity waylineFile = timerUtil.backWayline(multipartFile, waylineName, airport.getWorkspaceId(), username);
-// Long time = getNextDayEightAMTimestamp(getDistinctTaskIdCount(airport.getWorkspaceId()));
- Long time = getAdjustedTimestamp(50);
+ Long time = getNextDayEightAMTimestamp(getDistinctTaskIdCount(airport.getWorkspaceId()));
+// Long time = getAdjustedTimestamp(50);
List<List<Long>> listOfLists = new ArrayList<>();
List<Long> sublist = new ArrayList<>();
sublist.add(time);
@@ -341,7 +350,7 @@
public Map<String, String> updateTask(String base64, String Secret, String username) throws Exception {
ReturnTaskParam param = new ReturnTaskParam();
String secret = SM4Util.generateSM4Key();
- String retse = Utils.encrypt(secret, "04225AACF606D800EA3C2C31FCF8FB161B15F7A8D0460DEB91013D4F228C455E76A2ED8D71BC6525B5DC5CC015C155479D8839950344AEE438A3A6305C90F8269F");
+ String retse = Utils.encrypt(secret, "04CF7CAE31B5130D1D5D1AC1DC2778D94533868A8D57FC02BBD97B688E07145DAAA96462DC83D9F348261F738D51C049770C43BA53B584917C9E30C6221B737CDD");
String traceid = UUID.randomUUID().toString();
String sm4Secrect = deSM2(Secret, "00D631FD5615416EAB63D33A9E66E801F95DE840567504210080006081DE877AE3");
String decryptedJson = SM4Util.decrypt(sm4Secrect, base64);
@@ -414,12 +423,17 @@
}
@Override
- public ResponseResult cancelTask(String taskId) {
+ public Map<String, String> cancelTask(String taskId) throws InvalidCipherTextException, IOException {
+ String secret = SM4Util.generateSM4Key();
+ String retse = Utils.encrypt(secret, "04CF7CAE31B5130D1D5D1AC1DC2778D94533868A8D57FC02BBD97B688E07145DAAA96462DC83D9F348261F738D51C049770C43BA53B584917C9E30C6221B737CDD");
LambdaUpdateWrapper<WaylineJobEntity> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.like(WaylineJobEntity::getJobId, taskId)
.set(WaylineJobEntity::getStatus, 4);
waylineJobMapper.update(null, updateWrapper);
- return null;
+ Map<String, String> info = new HashMap<>();
+ info.put("serect", retse);
+ info.put("taskid", SM4Util.encrypt(secret,taskId));
+ return info;
}
public void processAndInsertTasks(List<AirportTasks> airportTasks) {
@@ -440,7 +454,7 @@
List<WaylineJobEntity> jobEntity = waylineJobMapper.selectList(new LambdaQueryWrapper<WaylineJobEntity>().like(WaylineJobEntity::getJobId, taskid));
if (jobEntity == null || jobEntity.isEmpty()) {
- return ResponseResult.error(201, "查询无人机机场任务状态失败!");
+ return ResponseResult.success(201, "查询无人机机场任务状态失败!","",UUID.randomUUID().toString());
}
// 检查是否所有 status 都等于 4
@@ -452,11 +466,11 @@
.allMatch(job -> job.getStatus() == 3);
if (allStatusAreFour) {
- return ResponseResult.error(204, "查询无人机机场任务状态成功!");
+ return ResponseResult.success(204, "查询无人机机场任务状态成功!","",UUID.randomUUID().toString());
} else if (allStatusAreThree) {
- return ResponseResult.error(200, "查询无人机机场任务状态成功!");
+ return ResponseResult.success(200, "查询无人机机场任务状态成功!","",UUID.randomUUID().toString());
} else {
- return ResponseResult.error(202, "查询无人机机场任务状态成功!");
+ return ResponseResult.success(202, "查询无人机机场任务状态成功!","",UUID.randomUUID().toString());
}
}
--
Gitblit v1.9.3