package com.dji.sample.droneairport.service.impl; import com.dji.sample.droneairport.model.dto.DroneStateDto; import com.dji.sample.droneairport.model.param.AddDeviceParam; import com.dji.sample.droneairport.model.param.RegistParam; import com.dji.sample.droneairport.service.RegistService; import com.dji.sample.droneairport.utils.AuthUtil; import com.dji.sample.droneairport.utils.SM2.Utils; import com.dji.sample.droneairport.utils.SM4Util; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.bouncycastle.crypto.InvalidCipherTextException; import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class RegistServiceImpl implements RegistService { private final RestTemplate restTemplate = new RestTemplate(); private final ObjectMapper objectMapper = new ObjectMapper(); public String registPort(RegistParam param) { try { // 构建请求体 String jsonBody = buildRequestBody(param); // 设置请求头 String base64=SM4Util.encrypt("jsimjrby3wqb7dbq",jsonBody); // 设置请求头 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.setAccept(List.of(MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN, MediaType.ALL)); headers.set("Accept-Language", "zh-CN,zh;q=0.9"); headers.setConnection("keep-alive"); headers.set("x-auth-token", AuthUtil.getToken()); headers.set("x-lc-token",Utils.encrypt("jsimjrby3wqb7dbq","044D6061FC08A19D3F32CEAA8CF6679B40500008FD741FC26DE7E50AEBF3A9115D47274437730EADEDAEF0CCC4853C5F0B35B30C6AEA83A5F6FBCA4ABEAC9E3B98")); // 构建请求实体 HttpEntity requestEntity = new HttpEntity<>(base64, headers); // 发送请求 ResponseEntity response = restTemplate.exchange( "https://xcx.geoway.com.cn:8033/v1/droneAirport/RegistService", HttpMethod.POST, requestEntity, String.class); return response.getBody(); } catch (Exception e) { // 异常处理 throw new IllegalArgumentException("Request failed: " + e.getMessage(), e); } } private String buildRequestBody(RegistParam param) { try { return objectMapper.writeValueAsString(param); } catch (JsonProcessingException e) { throw new RuntimeException("数据有误", e); } } @Override public String addDrone(AddDeviceParam param) { try { // 构建请求体 String jsonBody = buildRequestBody(param); String base64 = SM4Util.encrypt("jsimjrby3wqb7dbq", jsonBody); System.out.println(AuthUtil.getToken()); System.out.println(AuthUtil.getToken()); System.out.println(AuthUtil.getToken()); System.out.println(AuthUtil.getToken()); System.out.println(AuthUtil.getToken()); System.out.println(AuthUtil.getToken()); System.out.println(AuthUtil.getToken()); System.out.println(AuthUtil.getToken()); System.out.println(AuthUtil.getToken()); System.out.println(AuthUtil.getToken()); System.out.println(AuthUtil.getToken()); System.out.println(AuthUtil.getToken()); System.out.println(AuthUtil.getToken()); System.out.println(AuthUtil.getToken()); System.out.println(AuthUtil.getToken()); System.out.println(AuthUtil.getToken()); System.out.println(AuthUtil.getToken()); // 设置请求头 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.setAccept(List.of(MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN, MediaType.ALL)); headers.set("Accept-Language", "zh-CN,zh;q=0.9"); headers.setConnection("keep-alive"); headers.set("x-lc-token", AuthUtil.getToken()); headers.set("x-lc-secret", Utils.encrypt("jsimjrby3wqb7dbq", "044D6061FC08A19D3F32CEAA8CF6679B40500008FD741FC26DE7E50AEBF3A9115D47274437730EADEDAEF0CCC4853C5F0B35B30C6AEA83A5F6FBCA4ABEAC9E3B98")); // 构建请求实体 HttpEntity requestEntity = new HttpEntity<>(base64.getBytes(), headers); // 发送请求 RestTemplate restTemplate = new RestTemplate(); String response = restTemplate.postForObject("https://xcx.geoway.com.cn:8033/v1/droneAirport/addDevice", requestEntity, String.class); return response; } catch (Exception e) { // 异常处理 throw new IllegalArgumentException("Request failed: " + e.getMessage(), e); } } @Override public DroneStateDto getDroneState(String deviceId) { return null; } private String buildRequestBody(AddDeviceParam param) { try { return objectMapper.writeValueAsString(param); } catch (JsonProcessingException e) { throw new RuntimeException("数据有误", e); } } public static String getSM2(String data, String key, String pubKey) throws InvalidCipherTextException, IOException { String text = SM4Util.encrypt(key, data); String encrypt = Utils.encrypt(text, pubKey); encrypt = Utils.hexToBase64(encrypt); return encrypt; } public static String deSM2(String Base64, String priKey, String serect) throws Exception { String hex = Utils.convertBase64ToHex(Base64); String decrypt = Utils.decrypt(hex, priKey); return SM4Util.decrypt(serect, decrypt); } public static void main(String[] args) throws Exception { System.out.println(getSM2("jsimjrby3wqb7dbq", "jsimjrby3wqb7dbq", "044c4e29d89bc0389409e204b8c072af927d2bfbc62265472463f6fa2642e565411925c58ca72b8da87d743afffa9f94aeaee4351a0511692e06ad1567ba32d236")); System.out.println(deSM2("BN2taHcWvZhysmUbAHjPAWo/vAgW3pCTv4CK0dHJoUpM62k1oUeYnMvK4twfcBs/qkbygkAt+4pUaBa6iomM9MSKVCtOSb1QAaAQ9milAvkDPSBE9yrYHzLQeLkT9HwENBJ5NanF6vl2nPgpC1d1q+XeJEBrEvJtpQkSHHsh/me/1+h9zPy0MpMkH89S", "00e9ced7f847e5b414ef4f4f164ec5f83172b3183826c075f0e37d3f8a1e1f6c2c", "jsimjrby3wqb7dbq")); System.out.println(createKey()); } public static Map createKey() throws NoSuchAlgorithmException { Map keyPair = Utils.createKeyPair(); Map newKey = new HashMap<>(); newKey.put("publicKey", keyPair.get("pbcky")); newKey.put("privateKey", keyPair.get("pveky")); return newKey; } }