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(); } }