栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java获取电脑硬件信息做license

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java获取电脑硬件信息做license

项目做license,分为两部部分:
一、一个小应用获取电脑的硬件信息(硬件的CPU的ID,和主板信息)生成唯一标识码
二、Java服务获取应用信息,生成唯一标识码,其他地方调用。
得到的字符串利用DES对其进行加密

.exe应用利用python写一个简单的获取脚本:
ComputerUniqueCode.py

import wmi
import json
from pyDes import *
import base64


class ComputerUniqueCode:

    def __init__(self):
        self.Des_Key = "DESCRYPT"  # Key
        self.Des_IV = "x151x2a31x232"  # 自定IV向量
        global s
        s = wmi.WMI()

    # 1. 获取硬件信息,输出 macode
    #   1.CPU序列号(ID) 2.本地连接 无线局域网 以太网的MAC 3.硬盘序列号(唯一) 4.主板序列号(唯一)

    # cpu 序列号
    def get_CPU_info(self):
        cpu = []
        cp = s.Win32_Processor()
        for u in cp:
            cpu.append(
                {
                    "Name": u.Name,
                    "Serial Number": u.ProcessorId,
                    "CoreNum": u.NumberOfCores
                }
            )
        return cpu

    # 主板序列号
    def get_mainboard_info(self):
        mainboard = []
        for board_id in s.Win32_baseBoard():
            mainboard.append(board_id.SerialNumber.strip().strip('.'))
        return mainboard

        #  由于机器码太长,故选取机器码字符串部分字符

    #  E0:DB:55:B5:9C:16BFEBFBFF00040651W3P0VKEL6W8T1Z1.CN762063BN00A8
    def getCombinNumber(self):
        b = self.get_CPU_info()
        d = self.get_mainboard_info()
        machinecode_str = ""
        if len(b) != 0:
            machinecode_str = machinecode_str + b[0]['Serial Number']
        if len(d) != 0:
            machinecode_str = machinecode_str + d[0]
        return machinecode_str

    # DES+base64加密
    def Encrypted(self, tr):
        k = des(self.Des_Key, CBC, self.Des_IV, pad=None, padmode=PAD_PKCS5)
        EncryptStr = k.encrypt(tr)
        # EncryptStr = binascii.unhexlify(k.encrypt(str))
        ###  print('注册码:',base64.b64encode(EncryptStr))
        return base64.b64encode(EncryptStr)  # 转base64编码返回

    # #des+base64解码
    def DesDecrypt(self, tr):
        k = des(self.Des_Key, CBC, self.Des_IV, pad=None, padmode=PAD_PKCS5)
        DecryptStr = k.decrypt(base64.b64decode(tr))
        return DecryptStr  # 转base64解码返回

    # 获取mcode
    def get_mcode(self):
        mcode = self.getCombinNumber()
        if mcode != "" and mcode is not None:
            return self.Encrypted(mcode)
        else:
            return "未获取计算机唯一码"


界面:ComputerUnique.py

import tkinter as tk

from ComputerUniqueCode import ComputerUniqueCode

window = tk.Tk()
# 设置窗口的标题
window.title("电脑唯一码")
# 设置不可放大缩小
window.resizable(0, 0)
# 设置窗口得到位置
# 得到屏幕宽度
sw = window.winfo_screenwidth()
# 得到屏幕高度
sh = window.winfo_screenheight()

# 得到屏幕高度
ww = 500
wh = 250

x = (sw - ww) / 2
y = (sh - wh) / 2
window.geometry("%dx%d+%d+%d" % (ww, wh, x, y))
# 设置窗口大小
window.maxsize(ww, wh)
window.minsize(ww, wh)

# 设置结果显示文本
result_data_Text = tk.Text(window, width=70, height=12)  # 标签长宽
# 在窗口中放置结果显示文本
result_data_Text.pack()


# 获取按钮点击事件
def hit_me():
    cuc = ComputerUniqueCode()
    result_data_Text.insert(1.0, cuc.get_mcode())


# 点击按钮
b = tk.Button(window,
              text='获取',  # 显示在按钮上的文字
              width=15, height=2,
              command=hit_me, activeforeground='white',
              activebackground='red')  # 点击按钮式执行的命令

# 在窗口中放置按钮
b.pack(side=tk.RIGHT, padx=10, pady=10)
# 进入消息循环
window.mainloop()

打包用pyinstall,打包的时候注意python版本与os的版本的兼容性。
Java服务主要代码:

public static void main(String[] args) throws Exception {

        SystemInfo si = new SystemInfo();
        HardwareAbstractionLayer hal = si.getHardware();
        String mainboardid = hal.getComputerSystem().getbaseboard().getSerialNumber();
        String cpuid = hal.getProcessor().getProcessorIdentifier().getProcessorID();
        String mcode = cpuid + mainboardid;

        String Des_Key = "DESCRYPT";
        byte[] Des_IV = new byte[]{(byte) 0x15, (byte) 0x1, (byte) 0x2a, (byte) 0x3, (byte) 0x1, (byte) 0x23, (byte) 0x2, (byte) 0x0};
        DES des = new DES(Mode.CBC, Padding.PKCS5Padding, Des_Key.getBytes(), Des_IV);

        String e_mcode = StrUtil.str(base64.getEncoder().encode(des.encrypt(mcode)), CharsetUtil.CHARSET_GBK);
        System.out.println(e_mcode);
    }

pom.xml

    
        
            net.java.dev.jna
            jna
            5.9.0
        
        
            net.java.dev.jna
            jna-platform
            5.9.0
        
        
            com.github.oshi
            oshi-core
            5.8.3
        

        
            org.slf4j
            slf4j-api
            1.7.32
        
        
            org.slf4j
            slf4j-simple
            1.7.32
        

        
            cn.hutool
            hutool-all
            5.7.15
        
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/396839.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号