设备指纹生成
This commit is contained in:
parent
fc273376a7
commit
f01bd03b6f
@ -1,17 +1,71 @@
|
|||||||
package com.sunyard.cisd;
|
package com.sunyard.cisd;
|
||||||
|
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.security.PublicKey;
|
||||||
|
import java.util.Base64;
|
||||||
|
|
||||||
public class Main {
|
public class Main {
|
||||||
|
|
||||||
|
private static final String DEVICE_DIR = "/home/tms/device";
|
||||||
|
private static final String SIGN_FILE = DEVICE_DIR + "/dev.sign";
|
||||||
|
private static final String SIGN_SM3_FILE = DEVICE_DIR + "/dev.sign.sm3";
|
||||||
|
private static final String PUBLIC_KEY_FILE = DEVICE_DIR + "/dev.fingerprint.pub";
|
||||||
|
private static final String PUBLIC_KEY_SM3_FILE = DEVICE_DIR + "/dev.fingerprint.pub.sm3";
|
||||||
|
private static final String PRIVATE_KEY_PATH = "/sm2_private_key.pem";
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
DeviceFingerprintService service = new DeviceFingerprintService();
|
try {
|
||||||
DeviceFingerprint fingerprint = service.getDeviceFingerprint();
|
DeviceFingerprintService service = new DeviceFingerprintService();
|
||||||
|
DeviceFingerprint fingerprint = service.getDeviceFingerprint();
|
||||||
System.out.println("=== 设备指纹信息 ===");
|
|
||||||
System.out.println("主板序列号: " + fingerprint.getMotherboardSerialNumber());
|
System.out.println("=== 设备指纹信息 ===");
|
||||||
System.out.println("设备序列号: " + fingerprint.getDeviceSerialNumber());
|
System.out.println("主板序列号: " + fingerprint.getMotherboardSerialNumber());
|
||||||
System.out.println("CPU型号: " + fingerprint.getCpuModel());
|
System.out.println("设备序列号: " + fingerprint.getDeviceSerialNumber());
|
||||||
System.out.println("CPU序列号: " + fingerprint.getCpuSerialNumber());
|
System.out.println("CPU型号: " + fingerprint.getCpuModel());
|
||||||
System.out.println("内存大小: " + fingerprint.getMemorySize());
|
System.out.println("CPU序列号: " + fingerprint.getCpuSerialNumber());
|
||||||
System.out.println("首块网卡MAC地址: " + fingerprint.getFirstNetworkMacAddress());
|
System.out.println("内存大小: " + fingerprint.getMemorySize());
|
||||||
System.out.println("硬盘序列号: " + fingerprint.getHardDiskSerialNumber());
|
System.out.println("首块网卡MAC地址: " + fingerprint.getFirstNetworkMacAddress());
|
||||||
|
System.out.println("硬盘序列号: " + fingerprint.getHardDiskSerialNumber());
|
||||||
|
|
||||||
|
String plainText = buildPlainText(fingerprint);
|
||||||
|
System.out.println("\n拼接后的原文: " + plainText);
|
||||||
|
|
||||||
|
byte[] signature = SM2Util.sign(plainText.getBytes(StandardCharsets.UTF_8), PRIVATE_KEY_PATH);
|
||||||
|
System.out.println("签名结果(Base64): " + Base64.getEncoder().encodeToString(signature));
|
||||||
|
|
||||||
|
PublicKey publicKey = SM2Util.loadPublicKey("/sm2_public_key.pem");
|
||||||
|
String publicKeyPEM = SM2Util.publicKeyToPEM(publicKey);
|
||||||
|
|
||||||
|
SM2Util.writeFile(SIGN_FILE, signature);
|
||||||
|
System.out.println("签名文件已保存: " + SIGN_FILE);
|
||||||
|
|
||||||
|
String signSm3 = SM2Util.sm3DigestHex(signature);
|
||||||
|
SM2Util.writeFile(SIGN_SM3_FILE, signSm3);
|
||||||
|
System.out.println("签名SM3校验值已保存: " + SIGN_SM3_FILE + " (" + signSm3 + ")");
|
||||||
|
|
||||||
|
SM2Util.writeFile(PUBLIC_KEY_FILE, publicKeyPEM);
|
||||||
|
System.out.println("公钥文件已保存: " + PUBLIC_KEY_FILE);
|
||||||
|
|
||||||
|
String publicKeySm3 = SM2Util.sm3DigestHex(publicKeyPEM.getBytes(StandardCharsets.UTF_8));
|
||||||
|
SM2Util.writeFile(PUBLIC_KEY_SM3_FILE, publicKeySm3);
|
||||||
|
System.out.println("公钥SM3校验值已保存: " + PUBLIC_KEY_SM3_FILE + " (" + publicKeySm3 + ")");
|
||||||
|
|
||||||
|
boolean verified = SM2Util.verify(plainText.getBytes(StandardCharsets.UTF_8), signature, publicKey);
|
||||||
|
System.out.println("\n签名验证结果: " + verified);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.err.println("处理过程中发生错误: " + e.getMessage());
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
private static String buildPlainText(DeviceFingerprint fingerprint) {
|
||||||
|
return fingerprint.getMotherboardSerialNumber() +
|
||||||
|
fingerprint.getDeviceSerialNumber() +
|
||||||
|
fingerprint.getCpuModel() +
|
||||||
|
fingerprint.getCpuSerialNumber() +
|
||||||
|
fingerprint.getMemorySize() +
|
||||||
|
fingerprint.getFirstNetworkMacAddress() +
|
||||||
|
fingerprint.getHardDiskSerialNumber();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -4,12 +4,14 @@ import org.bouncycastle.asn1.ASN1ObjectIdentifier;
|
|||||||
import org.bouncycastle.asn1.gm.GMObjectIdentifiers;
|
import org.bouncycastle.asn1.gm.GMObjectIdentifiers;
|
||||||
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
|
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
|
||||||
import org.bouncycastle.asn1.x9.X9ECParameters;
|
import org.bouncycastle.asn1.x9.X9ECParameters;
|
||||||
|
import org.bouncycastle.crypto.Digest;
|
||||||
import org.bouncycastle.crypto.engines.SM2Engine;
|
import org.bouncycastle.crypto.engines.SM2Engine;
|
||||||
import org.bouncycastle.crypto.params.ECDomainParameters;
|
import org.bouncycastle.crypto.params.ECDomainParameters;
|
||||||
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
|
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
|
||||||
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
|
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
|
||||||
import org.bouncycastle.crypto.params.ParametersWithRandom;
|
import org.bouncycastle.crypto.params.ParametersWithRandom;
|
||||||
import org.bouncycastle.crypto.signers.SM2Signer;
|
import org.bouncycastle.crypto.signers.SM2Signer;
|
||||||
|
import org.bouncycastle.crypto.digests.SM3Digest;
|
||||||
import org.bouncycastle.jce.ECNamedCurveTable;
|
import org.bouncycastle.jce.ECNamedCurveTable;
|
||||||
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||||||
import org.bouncycastle.jce.spec.ECParameterSpec;
|
import org.bouncycastle.jce.spec.ECParameterSpec;
|
||||||
@ -17,10 +19,14 @@ import org.bouncycastle.jce.spec.ECPrivateKeySpec;
|
|||||||
import org.bouncycastle.jce.spec.ECPublicKeySpec;
|
import org.bouncycastle.jce.spec.ECPublicKeySpec;
|
||||||
import org.bouncycastle.math.ec.ECPoint;
|
import org.bouncycastle.math.ec.ECPoint;
|
||||||
import org.bouncycastle.util.BigIntegers;
|
import org.bouncycastle.util.BigIntegers;
|
||||||
|
import org.bouncycastle.util.encoders.Hex;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.OutputStream;
|
||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.security.KeyFactory;
|
import java.security.KeyFactory;
|
||||||
@ -153,4 +159,32 @@ public class SM2Util {
|
|||||||
pem.append("-----END PUBLIC KEY-----\n");
|
pem.append("-----END PUBLIC KEY-----\n");
|
||||||
return pem.toString();
|
return pem.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static byte[] sm3Digest(byte[] data) {
|
||||||
|
SM3Digest digest = new SM3Digest();
|
||||||
|
digest.update(data, 0, data.length);
|
||||||
|
byte[] result = new byte[digest.getDigestSize()];
|
||||||
|
digest.doFinal(result, 0);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String sm3DigestHex(byte[] data) {
|
||||||
|
byte[] digest = sm3Digest(data);
|
||||||
|
return Hex.toHexString(digest);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void writeFile(String filePath, byte[] content) throws Exception {
|
||||||
|
File file = new File(filePath);
|
||||||
|
File parentDir = file.getParentFile();
|
||||||
|
if (parentDir != null && !parentDir.exists()) {
|
||||||
|
parentDir.mkdirs();
|
||||||
|
}
|
||||||
|
try (OutputStream os = new FileOutputStream(file)) {
|
||||||
|
os.write(content);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void writeFile(String filePath, String content) throws Exception {
|
||||||
|
writeFile(filePath, content.getBytes(StandardCharsets.UTF_8));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
-----BEGIN PRIVATE KEY-----
|
-----BEGIN PRIVATE KEY-----
|
||||||
MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQg7isDlcvx8WmYYw/6
|
MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgWFBMLowcSO3Pn8tP
|
||||||
Xc25GcgDx3N19Czq6O2tz2v5Jx+gCgYIKoEcz1UBgi2hRANCAATJMA+gouZuIttR
|
KLszWBm/BSNPwSQvXErq1NiXkvqgCgYIKoEcz1UBgi2hRANCAARhkJ62bG2Gjg3h
|
||||||
bqpDk/tjk4jefTgG1ncg7xuVoTVz10hFja5bbTssru4oD4Pooxz4VbTR1KIylDYo
|
LE5fSlyaYxjFNKEyehbFUcHQSOPwRL9pDwUD5bnqpo3jNNlVYQnaKV0khg8gKlBU
|
||||||
bLe3PyUJ
|
I3MM2oX4
|
||||||
-----END PRIVATE KEY-----
|
-----END PRIVATE KEY-----
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
-----BEGIN PUBLIC KEY-----
|
-----BEGIN PUBLIC KEY-----
|
||||||
MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEyTAPoKLmbiLbUW6qQ5P7Y5OI3n04
|
MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEYZCetmxtho4N4SxOX0pcmmMYxTSh
|
||||||
BtZ3IO8blaE1c9dIRY2uW207LK7uKA+D6KMc+FW00dSiMpQ2KGy3tz8lCQ==
|
MnoWxVHB0Ejj8ES/aQ8FA+W56qaN4zTZVWEJ2ildJIYPICpQVCNzDNqF+A==
|
||||||
-----END PUBLIC KEY-----
|
-----END PUBLIC KEY-----
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user