diff --git a/src/main/java/com/example/demo/common/domain/BaseXPortData.java b/src/main/java/com/example/demo/common/domain/BaseXPortData.java index e60168e..4b14433 100644 --- a/src/main/java/com/example/demo/common/domain/BaseXPortData.java +++ b/src/main/java/com/example/demo/common/domain/BaseXPortData.java @@ -1,5 +1,6 @@ package com.example.demo.common.domain; +import com.alibaba.fastjson.JSON; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; @@ -10,6 +11,8 @@ import lombok.experimental.SuperBuilder; import java.io.Serial; import java.io.Serializable; +import java.security.MessageDigest; +import java.util.Objects; /** * 导入导出加密传输对象 @@ -43,22 +46,34 @@ public class BaseXPortData implements Serializable { private String ts; /** - * 签名 + * 签名 sign */ @Schema(description = "签名") - private String sign; + private String s; /** - * 完整性 + * 完整性 gritty */ @Schema(description = "完整性") - private String gritty; + private String g; /** - * 版本 + * 版本 version */ @Schema(description = "版本") - private String version; + private String v; + + /** + * 类名 clazz + */ + @Schema(description = "类名") + private String c; + + /** + * 类名 service + */ + @Schema(description = "服务名") + private String e; /** * 数据 @@ -66,4 +81,64 @@ public class BaseXPortData implements Serializable { @Schema(description = "数据") private String data; + /** + * 获取校验和 + * @return 为空则进行计算 + */ + public String getG() { + return g == null || g.trim().isEmpty() ? (generateChecksum(c, v, e, data)) : (g); + } + + /** + * 生成数据的校验和 + */ + public static String generateChecksum(String c, String v, String e, String data) { + try { + String combined = c + "|" + v + "|" + e + "|" + data; + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] hash = digest.digest(combined.getBytes()); + + @SuppressWarnings("all") + StringBuilder hexString = new StringBuilder(); + for (byte b : hash) { + String hex = Integer.toHexString(0xff & b); + if (hex.length() == 1) hexString.append('0'); + hexString.append(hex); + } + return hexString.toString(); + } catch (Exception ex) { + throw new RuntimeException("生成校验和失败", ex); + } + } + + /** + * 验证数据完整性 + */ + public static boolean verifyIntegrity(String c, String v, String e, String data, String expectedChecksum) { + String actualChecksum = generateChecksum(c, v, e, data); + return Objects.equals(actualChecksum, expectedChecksum); + } + + /** + * 验证数据完整性 + */ + public boolean verifyIntegrity() { + return verifyIntegrity(c, v, e, data, g); + } + + public static void main(String[] args) { + BaseXPortData baseXPortData = new BaseXPortData(); + baseXPortData.id = "1"; + baseXPortData.ts = "1"; + // baseXPortData.s = "1"; + baseXPortData.data = "123"; + System.out.println("check: " + baseXPortData.getG()); + + String json = JSON.toJSONString(baseXPortData); + System.out.println("json: " + json); + + BaseXPortData baseXPortData1 = JSON.parseObject(json, BaseXPortData.class); + baseXPortData1.data = "1234"; + System.out.println("verifyIntegrity: " + baseXPortData1.verifyIntegrity()); + } }