You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
udi-wms-java/src/main/java/com/glxp/api/util/HardWareUtils.java

192 lines
6.7 KiB
Java

package com.glxp.api.util;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
import java.applet.Applet;
import java.awt.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.NetworkInterface;
public class HardWareUtils extends Applet {
public HardWareUtils() {
}
@Override
public void paint(Graphics paint) {
super.paint(paint);
paint.drawString("获取硬件信息", 10, 10);
paint.drawString("CPU SN:" + HardWareUtils.getCPUSerial(), 10, 30);
paint.drawString("主板 SN:" + HardWareUtils.getMotherboardSN(), 10, 50);
// paint.drawString("C盘 SN:" + HardWareUtils.getHardDiskSN("c"), 10, 70);
paint.drawString("MAC SN:" + HardWareUtils.getMac(), 10, 90);
}
/**
* 29 * 获取主板序列号
* 30 *
* 31 * @return
* 32
*/
public static String getMotherboardSN() {
String result = "";
try {
File file = File.createTempFile("realhowto", ".vbs");
file.deleteOnExit();
FileWriter fw = new FileWriter(file);
String vbs = "Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n"
+ "Set colItems = objWMIService.ExecQuery _ \n"
+ " (\"Select * from Win32_BaseBoard\") \n"
+ "For Each objItem in colItems \n"
+ " Wscript.Echo objItem.SerialNumber \n"
+ " exit for ' do the first cpu only! \n" + "Next \n";
fw.write(vbs);
fw.close();
Process p = Runtime.getRuntime().exec(
"cscript //NoLogo " + file.getPath());
BufferedReader input = new BufferedReader(new InputStreamReader(p
.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
result += line;
}
input.close();
} catch (Exception e) {
e.printStackTrace();
}
return result.trim();
}
/**
* 64 * 获取硬盘序列号
* 65 *
* 66 * @param drive
* 67 * 盘符
* 68 * @return
* 69
*/
public static String getHardDiskSN(String drive) {
String result = "";
try {
File file = File.createTempFile("realhowto", ".vbs");
file.deleteOnExit();
FileWriter fw = new FileWriter(file);
String vbs = "Set objFSO = CreateObject(\"Scripting.FileSystemObject\")\n"
+ "Set colDrives = objFSO.Drives\n"
+ "Set objDrive = colDrives.item(\""
+ drive
+ "\")\n"
+ "Wscript.Echo objDrive.SerialNumber"; // see note
fw.write(vbs);
fw.close();
Process p = Runtime.getRuntime().exec(
"cscript //NoLogo " + file.getPath());
BufferedReader input = new BufferedReader(new InputStreamReader(p
.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
result += line;
}
input.close();
} catch (Exception e) {
e.printStackTrace();
}
return result.trim();
}
/**
* 101 * 获取CPU序列号
* 102 *
* 103 * @return
* 104
*/
public static String getCPUSerial() {
String result = "";
try {
File file = File.createTempFile("tmp", ".vbs");
file.deleteOnExit();
FileWriter fw = new FileWriter(file);
String vbs = "Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n"
+ "Set colItems = objWMIService.ExecQuery _ \n"
+ " (\"Select * from Win32_Processor\") \n"
+ "For Each objItem in colItems \n"
+ " Wscript.Echo objItem.ProcessorId \n"
+ " exit for ' do the first cpu only! \n" + "Next \n";
fw.write(vbs);
fw.close();
Process p = Runtime.getRuntime().exec(
"cscript //NoLogo " + file.getPath());
BufferedReader input = new BufferedReader(new InputStreamReader(p
.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
result += line;
}
input.close();
file.delete();
} catch (Exception e) {
e.fillInStackTrace();
}
if (result.trim().length() < 1 || result == null) {
result = "无CPU_ID被读取";
}
return result.trim();
}
/**
* 139 * 获取MAC地址
* 140
*/
public static String getMac() {
try {
byte[] mac = NetworkInterface.getByInetAddress(InetAddress.getLocalHost()).getHardwareAddress();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < mac.length; i++) {
if (i != 0) {
sb.append("-");
}
String s = Integer.toHexString(mac[i] & 0xFF);
sb.append(s.length() == 1 ? 0 + s : s);
}
return sb.toString().toUpperCase();
} catch (Exception e) {
return "";
}
}
public static String getMachineInfo() {
String msg = getCPUSerial() + getMotherboardSN().replace(".", "") +
getHardDiskSN("c") + getMac().replace("-", "");
return msg;
}
public static void main(String[] args) throws Exception {
System.out.println(getCPUSerial());//CPU
System.out.println(getMotherboardSN());//主板
System.out.println(getHardDiskSN("c"));//c盘
System.out.println(getMac());//MAC
String msg = getCPUSerial() + getMotherboardSN().replace(".", "") + getHardDiskSN("c") + getMac().replace("-", "");
System.out.println("原始数据:" + msg);//rT7DaHDt68m9IjVr
// String encrypt = DesUtil.encrypt(msg);
// System.out.println("加密:" + encrypt);
// String decrypt = DesUtil.decrypt(encrypt);
// System.out.println("解密:" + decrypt);
SymmetricCrypto sm4 = SmUtil.sm4();
String encryptHex = sm4.encryptHex("rT7DaHDt68m9IjVr" + msg);
String decryptStr = sm4.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);
System.out.println("加密后:" + msg);//rT7DaHDt68m9IjVr
// MyHardWareUtils.getCPUID();
}
}