1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- import hashlib
- import platform
- import uuid
- import wmi
- class Hardware:
- machine_code = None
- @classmethod
- def _get_system_info(cls):
- """获取系统名称"""
- system_info = platform.uname()
- return system_info.node
- @classmethod
- def _get_cpu_info(cls):
- """获取CPU信息(弃用,耗时过长)"""
- c = wmi.WMI()
- info = ''
- for cpu in c.Win32_Processor():
- res = str(cpu.SerialNumber)
- info += res
- return info
- @classmethod
- def _get_board_info(cls):
- """获取主板信息"""
- c = wmi.WMI()
- info = ""
- for board in c.Win32_BaseBoard():
- res = str(board.SerialNumber)
- info += res
- return info
- @classmethod
- def _get_bios_info(cls):
- """获取BIOS信息"""
- c = wmi.WMI()
- info = ""
- for bios in c.Win32_BIOS():
- res = str(bios.SerialNumber)
- info += res
- return info
- @classmethod
- def _get_disk_info(cls):
- """获取硬盘信息"""
- c = wmi.WMI()
- info = ""
- for disk in c.Win32_DiskDrive():
- res = str(disk.SerialNumber)
- info += res
- return info
- @classmethod
- def _pwd_to_sha256(cls, password, salt: str):
- """哈希加密"""
- sha = hashlib.sha256()
- sha.update(password.encode('utf-8'))
- sha.update(salt.encode('gbk'))
- return sha.hexdigest()
- @classmethod
- def generate_machine_code(cls):
- """生成机器码"""
- if cls.machine_code:
- return True, cls.machine_code
- try:
- info_list = [cls._get_system_info(),
- cls._get_board_info(),
- cls._get_bios_info(),
- cls._get_disk_info()
- ]
- except Exception as e:
- print(e)
- return False, None
- combined_info = "-".join(info_list)
- code_temp = cls._pwd_to_sha256(combined_info, 'qingmagooki')
- code = code_temp[::2]
- cls.machine_code = code
- return True, code
- @classmethod
- def get_machine_code(cls):
- ok, code = cls.generate_machine_code()
- if not ok:
- return uuid.getnode()
- return code
|