↓ 跳过正文

Java根据硬件信息生成唯一机器码

正能量 1 分钟阅读 更新于 2026-10-18

解释 Java 硬件信息生成机器标识的组成,补充稳定性、空值与隐私检查。

Java 编程:原站配图。

代码如下:

public class MachineCodeUtil {

    public static void main(String[] args) {
        SystemInfo systemInfo = new SystemInfo();
        HardwareAbstractionLayer hal = systemInfo.getHardware();

        String cpuSerial = getCpuSerial(hal.getProcessor());
        System.out.println("CPU序列号:" + cpuSerial);
        String diskSerial = getDiskSerial(systemInfo);
        System.out.println("磁盘序列号:" + diskSerial);
        String motherboardSerial = getMotherboardSerial(hal.getComputerSystem());
        System.out.println("主板序列号:" + motherboardSerial);
        String memorySerial = getMemorySerial(hal.getMemory());
        System.out.println("内存大小:" + memorySerial);
        String combinedInfo = cpuSerial + diskSerial + motherboardSerial + memorySerial;
        String machineCode = SecureUtil.sha256(combinedInfo);
        System.out.println("Unique Machine Code: " + machineCode);
    }

    /**
     * CPU序列号
     * @param processor
     * @return
     */
    private static String getCpuSerial(CentralProcessor processor) {
        return processor.getProcessorIdentifier().getProcessorID();
    }

    /**
     * 操作系统所在磁盘的驱动器UUID
     * @param si
     * @return
     */
    private static String getDiskSerial(SystemInfo si) {
        String systemDrive = System.getenv("SystemDrive") + File.separator;
        StringBuilder serials = new StringBuilder();
        List<OSFileStore> stores = si.getOperatingSystem().getFileSystem().getFileStores();
        for (OSFileStore store : stores) {
            if (systemDrive.equals(store.getMount())) {
                serials.append(store.getUUID());
                break;
            }
        }
        return serials.toString().trim();
    }

    /**
     * 主板序列号
     * @param computerSystem
     * @return
     */
    private static String getMotherboardSerial(ComputerSystem computerSystem) {
        return computerSystem.getBaseboard().getSerialNumber();
    }

    /**
     * 内存总大小
     * @param memory
     * @return
     */
    private static String getMemorySerial(GlobalMemory memory) {
        return String.valueOf(memory.getTotal());
    }

}

补充阅读
#

解释 Java 硬件信息生成机器标识的组成,补充稳定性、空值与隐私检查。

如何理解与使用
#

示例组合处理器、磁盘和主板信息,实际可读取字段受硬件、权限与虚拟化环境影响;有些设备可能缺少序列号。

验证与边界
#

测试设备重启、硬件更换和虚拟机复制后的结果。硬件指纹不能自动保证全球唯一,也不适合作为秘密凭据,应尽量减少暴露原始标识。