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