日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java获取电脑硬件信息做license

發布時間:2023/12/29 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java获取电脑硬件信息做license 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目做license,分為兩部部分:
一、一個小應用獲取電腦的硬件信息(硬件的CPU的ID,和主板信息)生成唯一標識碼
二、Java服務獲取應用信息,生成唯一標識碼,其他地方調用。
得到的字符串利用DES對其進行加密

.exe應用利用python寫一個簡單的獲取腳本:
ComputerUniqueCode.py

import wmi import json from pyDes import * import base64class ComputerUniqueCode:def __init__(self):self.Des_Key = "DESCRYPT" # Keyself.Des_IV = "\x15\1\x2a\3\1\x23\2\0" # 自定IV向量global ss = 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.CN762063BN00A8def 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解碼返回# 獲取mcodedef get_mcode(self):mcode = self.getCombinNumber()if mcode != "" and mcode is not None:return self.Encrypted(mcode)else:return "未獲取計算機唯一碼"

界面:ComputerUnique.py

import tkinter as tkfrom ComputerUniqueCode import ComputerUniqueCodewindow = tk.Tk() # 設置窗口的標題 window.title("電腦唯一碼") # 設置不可放大縮小 window.resizable(0, 0) # 設置窗口得到位置 # 得到屏幕寬度 sw = window.winfo_screenwidth() # 得到屏幕高度 sh = window.winfo_screenheight()# 得到屏幕高度 ww = 500 wh = 250x = (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

<dependencies><dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>5.9.0</version></dependency><dependency><groupId>net.java.dev.jna</groupId><artifactId>jna-platform</artifactId><version>5.9.0</version></dependency><dependency><groupId>com.github.oshi</groupId><artifactId>oshi-core</artifactId><version>5.8.3</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.32</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.32</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.15</version></dependency></dependencies>

總結

以上是生活随笔為你收集整理的Java获取电脑硬件信息做license的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。