数据完整性校验
This commit is contained in:
parent
60f6020c2c
commit
89a2d2bfd1
@ -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());
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user