116 lines
3.9 KiB
Python
116 lines
3.9 KiB
Python
import wmi
|
|
import os
|
|
import base64
|
|
import hashlib
|
|
import pyDes
|
|
import uuid
|
|
|
|
class Register:
|
|
def __init__(self):
|
|
self.Des_key = "zhdchykj" #Key,需八位
|
|
self.Des_IV = "12345678" # 自定IV向量
|
|
|
|
self.pre_str = "ZHDC" # 前缀
|
|
self.suf_str = "HYKJ" # 后缀
|
|
|
|
# 获取机器码,机器码由以下四部分拼接组成
|
|
# 1、CPU序列号 2、MAC地址 3.硬盘序列号 4.主板序列号
|
|
self.m_wmi = wmi.WMI()
|
|
|
|
#cpu序列号 16位
|
|
def get_cpu_serial(self):
|
|
cpu_info = self.m_wmi.Win32_Processor()
|
|
if len(cpu_info) > 0:
|
|
serial_number = cpu_info[0].ProcessorId
|
|
return serial_number
|
|
else:
|
|
return "ABCDEFGHIJKLMNOP"
|
|
|
|
#硬盘序列号 15位
|
|
def get_disk_serial(self):
|
|
disk_info = self.m_wmi.Win32_PhysicalMedia()
|
|
disk_info.sort()
|
|
if len(disk_info) > 0:
|
|
serial_number = disk_info[0].SerialNumber.strip()
|
|
return serial_number
|
|
else:
|
|
return "WD-ABCDEFGHIJKL"
|
|
|
|
#mac地址 12位
|
|
# def get_mac_address(self):
|
|
# for network in self.m_wmi.Win32_NetworkAdapterConfiguration():
|
|
# mac_address = network.MacAddress
|
|
# if mac_address != None:
|
|
# return mac_address.replace(":", "")
|
|
# return "ABCDEF123456"
|
|
|
|
def get_mac_address(self):
|
|
node = uuid.getnode()
|
|
macHex = uuid.UUID(int=node).hex[-12:]
|
|
return macHex.upper()[:12]
|
|
|
|
#主板序列号 14位
|
|
def get_board_serial(self):
|
|
board_info = self.m_wmi.Win32_BaseBoard()
|
|
if len(board_info) > 0:
|
|
board_id = board_info[0].SerialNumber.strip().strip('.')
|
|
return board_id
|
|
else:
|
|
return "ABCDEFGHIJKLMN"
|
|
|
|
# 拼接生成机器码
|
|
def getMachineCode(self):
|
|
mac_address = self.get_mac_address()
|
|
# cpu_serial = self.get_cpu_serial()
|
|
# disk_serial = self.get_disk_serial()
|
|
# board_serial = self.get_board_serial()
|
|
|
|
# combine_str = self.pre_str + mac_address + cpu_serial + disk_serial + board_serial + self.suf_str
|
|
|
|
combine_str = self.pre_str + mac_address + self.suf_str
|
|
combine_byte = combine_str.encode("utf-8")
|
|
machine_code = hashlib.md5(combine_byte).hexdigest()
|
|
return machine_code.upper()
|
|
|
|
#DES+base64加密
|
|
def Encrypt(self, tr):
|
|
k = pyDes.des(self.Des_key, pyDes.CBC, self.Des_IV, pad=None, padmode=pyDes.PAD_PKCS5)
|
|
EncryptStr = k.encrypt(tr)
|
|
return base64.b32encode(EncryptStr) # 转base64编码返回
|
|
|
|
# 获取register成功后生成注册文件
|
|
def register(self):
|
|
machine_code = self.getMachineCode()
|
|
print('请发送', machine_code, '给华燕技术人员获取激活码')
|
|
key_code = input('请输入激活码:')
|
|
if key_code:
|
|
encrypt_code = self.Encrypt(machine_code.encode("utf-8"))
|
|
md5_code = hashlib.md5(encrypt_code).hexdigest().upper()
|
|
key_code = key_code.upper()
|
|
|
|
if md5_code == key_code:
|
|
print("激活成功!")
|
|
with open('register.bin', 'w') as f:
|
|
f.write(key_code)
|
|
return True
|
|
else:
|
|
print("激活码错误,请重新输入!")
|
|
return False
|
|
else:
|
|
return False
|
|
|
|
|
|
# 打开程序先调用注册文件,比较注册文件中注册码与此时的硬件信息编码后是否一致
|
|
def checkAuthored(self):
|
|
machine_code = self.getMachineCode()
|
|
encrypt_code = self.Encrypt(machine_code.encode("utf-8"))
|
|
md5_code = hashlib.md5(encrypt_code).hexdigest().upper()
|
|
|
|
if os.path.exists("register.bin"):
|
|
with open("register.bin", "r") as f:
|
|
key_code = f.read()
|
|
if key_code == md5_code:
|
|
return True
|
|
return False
|
|
|