原文链接:

python读取电脑识别码_三更雪的博客-CSDN博客_python获取机器码

机缘巧合下,看见了这篇文章。就copy下来,想运行一下。结果上班看了1,2天代码终于看懂了(我是新手),bug也解决好几天,就想着记录一下,顺便加点注释。总体代码在最后。

目录

一、注释

二、总体代码


一、注释

1、引入模块

import wmi
import json
import base64
from pyDes import *

这里可能引入会报下面的错,我的原因是因为pywin32的版本不对,不在过多赘述,具体查看import win32api; ImportError: DLL load failed: 找不到指定的程序_TaiBai_435_的博客-CSDN博客

ImportError: DLL load failed while importing win32api: 找不到指定的程序。

2、定义函数:设置key和自定iv向量

    def __init__(self):self.Des_Key = "DESCRYPT"  # Keyself.Des_IV = "\x15\13\x2a\3\1\x23\2\0"  # 自定IV向量

3、定义加密函数Encrypted():通过上面key和iv向量

    def Encrypted(self, tr):k = des(self.Des_Key, CBC, self.Des_IV, pad=None, padmode=PAD_PKCS5)EncryptStr = k.encrypt(tr)return base64.b64encode(EncryptStr)  # 返回base64编码的值

4、定义函数:获取cpu,硬盘,主板序列号和mac地址

# 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})#   print(":::CPU info:", json.dumps(cpu))return cpu# 硬盘序列号def get_disk_info(self):disk = []for pd in s.Win32_DiskDrive():disk.append({"Serial": s.Win32_PhysicalMedia()[0].SerialNumber.lstrip().rstrip(),  # 获取硬盘序列号,调用另外一个win32 API"ID": pd.deviceid,"Caption": pd.Caption,"size": str(int(float(pd.Size) / 1024 / 1024 / 1024)) + "G"})#   print(":::Disk info:", json.dumps(disk))return disk# mac 地址(包括虚拟机的)def get_network_info(self):network = []for nw in s.Win32_NetworkAdapterConfiguration():  # IPEnabled=0if nw.MACAddress != None:network.append({"MAC": nw.MACAddress,  # 无线局域网适配器 WLAN 物理地址"ip": nw.IPAddress})#    print(":::Network info:", json.dumps(network))return network# 主板序列号def get_mainboard_info(self):mainboard = []for board_id in s.Win32_BaseBoard():mainboard.append(board_id.SerialNumber.strip().strip('.'))return mainboard

5、定义拼接函数getCombinNumber():

    def getCombinNumber(self):a = self.get_network_info()b = self.get_CPU_info()c = self.get_disk_info()d = self.get_mainboard_info()machinecode_str = ""machinecode_str = machinecode_str + a[0]['MAC'] + b[0]['Serial Number'] + c[0]['Serial'] + d[0]selectindex = [15, 31, 34, 39, 44, 48]macode = ""for i in selectindex: #根据字符串位数筛选部分字符macode = macode + machinecode_str[i]return macode

首先先将上面的获取的字符串进行拼接 然后根据索引截取字符串进行拼接

74:4C:A1:9D:94:0A178BFBFF00A50F0000A0_7501_2D69_E09C.PF2ZDT230               0   A   5    D   E

6、定义比较函数checkAuthored():

    # 打开程序先调用注册文件,比较注册文件中注册码与此时获取的硬件信息编码后是否一致def checkAuthored(self):ontent = self.getCombinNumber()  #获取上面拼接的字符串tent = bytes(ontent, encoding='utf-8') #对拼接的字符串ontent,按照指定的 utf-8编码 将字符串转换为字节序列tentcontent = self.Encrypted(tent) # 对tent使用Encrypted函数进行加密# 读写文件要加判断try:f = open('register.txt', 'r')if f: # 如果txt存在key = f.read()if key: # 如果读到txt里面的注册码key_decrypted = bytes(key, encoding='utf-8')  # 将注册文件中注册码按照指定的 utf-8编码 将字符串转换为字节序列key_decryptedif key_decrypted: # 如果key_decrypted 存在if key_decrypted == content: # 如果key_decrypted 等于 contentprint("register succeed.")else: # 如果key_decrypted 不等于 contentprint('未找到注册文件,', '请重新输入注册码,')self.regist() # 执行函数regist()else: # 如果key_decrypted 不能被解析self.regist()print('未找到注册文件,', '请重新输入注册码,')else: # 如果读不到txt里面的注册码self.regist()print('未找到注册文件,', '请重新输入注册码,')else: #如果txt不存在 运行registself.regist()except: # 如果未找到注册文件print('请获取注册码')注册码登录self.regist()

7、定义注册函数regist():

    # 获取注册码,验证成功后生成注册文件def regist(self):key = input('please input your register code: ') #  输入注册码keyif key: # 如果key存在ontent = self.getCombinNumber() # 获取getCombinNumber返回的macode,赋值给ontenttent = bytes(ontent, encoding='utf-8') # 对拼接的字符串ontent,按照指定的 utf-8编码 将字符串转换为字节序列tentcontent = self.Encrypted(tent) # 对tent使用Encrypted函数进行加密key_decrypted = bytes(key, encoding='utf-8') # 对注册码key,按照指定的 utf-8编码 将字符串转换为字节序列key_decryptedif content != 0 and key_decrypted != 0:if content != key_decrypted: # 如果 content 不等于 key_decryptedprint("wrong register code, please check and input your register code again:")self.regist() # 重新运行regist()函数elif content == key_decrypted: # 如果 content 等于 key_decryptedprint("register succeed.")# 读写文件要加判断with open('register.txt', 'w') as f:f.write(key) # 将注册码写入register.txt中f.close()return Trueelse: return Falseelse:return Falseelse: # 如果key不存在self.regist()return False

8、定义主函数main()

def second(): # 定义seceond的函数print("运行成功")print("输入任何键退出")def main(): # 定义主函数reg = register()reg.checkAuthored() # 运行checkAuthored()函数second() # 运行second()函数main() # 运行main()函数

9、当执行这个程序的时候,首先运行main()-checkAuthored(),如果没有注册码文件或者注册码错误,运行regist()函数,如果注册码正确,则运行second()函数

二、总体代码

import wmi
import json
import base64
from pyDes import *class register:def __init__(self):self.Des_Key = "DESCRYPT"  # Keyself.Des_IV = "\x15\13\x2a\3\1\x23\2\0"  # 自定IV向量#  1. 获取硬件信息,输出 macode#  1.CPU序列号(ID) 2.本地连接 无线局域网 以太网的MAC 3.硬盘序列号(唯一) 4.主板序列号(唯一)global ss = wmi.WMI()# 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})#   print(":::CPU info:", json.dumps(cpu))return cpu# 硬盘序列号def get_disk_info(self):disk = []for pd in s.Win32_DiskDrive():disk.append({"Serial": s.Win32_PhysicalMedia()[0].SerialNumber.lstrip().rstrip(),  # 获取硬盘序列号,调用另外一个win32 API"ID": pd.deviceid,"Caption": pd.Caption,"size": str(int(float(pd.Size) / 1024 / 1024 / 1024)) + "G"})#   print(":::Disk info:", json.dumps(disk))return disk# mac 地址(包括虚拟机的)def get_network_info(self):network = []for nw in s.Win32_NetworkAdapterConfiguration():  # IPEnabled=0if nw.MACAddress != None:network.append({"MAC": nw.MACAddress,  # 无线局域网适配器 WLAN 物理地址"ip": nw.IPAddress})#    print(":::Network info:", json.dumps(network))return network# 主板序列号def get_mainboard_info(self):mainboard = []for board_id in s.Win32_BaseBoard():mainboard.append(board_id.SerialNumber.strip().strip('.'))return mainboard#  由于机器码太长,故选取机器码字符串部分字符#  74:4C:A1:9D:94:0A178BFBFF00A50F0000A0_7501_2D69_E09C.PF2ZDT23#                 0               0   A   5    D   Edef getCombinNumber(self):a = self.get_network_info()b = self.get_CPU_info()c = self.get_disk_info()d = self.get_mainboard_info()machinecode_str = ""machinecode_str = machinecode_str + a[0]['MAC'] + b[0]['Serial Number'] + c[0]['Serial'] + d[0]selectindex = [15, 31, 34, 39, 44, 48]macode = ""for i in selectindex: #根据字符串位数筛选部分字符macode = macode + machinecode_str[i]return macode# ---------------------------2. 注册登录---------------------------------# DES+base64加密def Encrypted(self, tr):k = des(self.Des_Key, CBC, self.Des_IV, pad=None, padmode=PAD_PKCS5)EncryptStr = k.encrypt(tr)return base64.b64encode(EncryptStr)  # 返回base64编码的值# 获取注册码,验证成功后生成注册文件def regist(self):key = input('please input your register code: ') #  输入注册码key# 由于输入类似“12”这种不符合base64规则的字符串会引起异常,所以需要增加输入判断if key: # 如果key存在ontent = self.getCombinNumber() # 获取getCombinNumber返回的macode,赋值给ontenttent = bytes(ontent, encoding='utf-8') # 对拼接的字符串ontent,按照指定的 utf-8编码 将字符串转换为字节序列tentcontent = self.Encrypted(tent) # 对tent使用Encrypted函数进行加密# print('content :', content)# print(type(content))key_decrypted = bytes(key, encoding='utf-8') # 对注册码key,按照指定的 utf-8编码 将字符串转换为字节序列key_decrypted# print(key_decrypted)if content != 0 and key_decrypted != 0:if content != key_decrypted: # 如果 content 不等于 key_decryptedprint("wrong register code, please check and input your register code again:")self.regist() # 重新运行regist()函数elif content == key_decrypted: # 如果 content 等于 key_decryptedprint("register succeed.")# 读写文件要加判断with open('register.txt', 'w') as f:f.write(key) # 将注册码写入register.txt中f.close()return Trueelse:return Falseelse:return Falseelse: # 如果key不存在self.regist()return False# 打开程序先调用注册文件,比较注册文件中注册码与此时获取的硬件信息编码后是否一致def checkAuthored(self):ontent = self.getCombinNumber() # 获取getCombinNumber返回的macode,赋值给ontenttent = bytes(ontent, encoding='utf-8') # 对拼接的字符串ontent,按照指定的 utf-8编码 将字符串转换为字节序列tentcontent = self.Encrypted(tent) # 对tent使用Encrypted函数进行加密# 读写文件要加判断try:f = open('register.txt', 'r')if f: # 如果txt存在key = f.read()if key: # 如果读到txt里面的注册码key_decrypted = bytes(key, encoding='utf-8')  # 将注册文件中注册码按照指定的 utf-8编码 将字符串转换为字节序列key_decrypted# print('key_decrypted:',key_decrypted)# print('content:',content)if key_decrypted: # 如果key_decrypted 存在if key_decrypted == content: # 如果key_decrypted 等于 contentprint("register succeed.")# checkAuthoredResult = 1  # 注册文件与机器码一致else: # 如果key_decrypted 不等于 content# checkAuthoredResult = -1 # 注册文件与机器码不一致print('未找到注册文件,', '请重新输入注册码,')self.regist() # 执行函数regist()else: # 如果key_decrypted 不存在# checkAuthoredResult = -2     # 注册文件的注册码不能被解析self.regist()print('未找到注册文件,', '请重新输入注册码,')else: # 如果没有读到txt里面的注册码# checkAuthoredResult = -3         # 注册文件中不能被读取self.regist()print('未找到注册文件,', '请重新输入注册码,')else: #如果txt不存在 运行registself.regist()except: # 如果发送了异常print('获取注册码')# checkAuthoredResult = 0                      # 未找到注册文件,请重新输入注册码登录self.regist()# print(checkAuthoredResult)# return checkAuthoredResultdef second(): # 定义注册码运行成功的函数print("运行成功")print("输入任何键退出")def main(): # 定义主函数reg = register()reg.checkAuthored() # 运行checkAuthored()函数second() # 运行second()函数main() # 运行main()函数

【实践】python 机器码 实现一机一码相关推荐

  1. 唐诗三百首加密软件如何使用_视频加密一机一码软件该如何选择?有哪些因素影响?...

    视频加密一机一码软件,是一种早期的视频加密软件.目前也是在用,用户在授权的条件下获取视频观看,例如教学视频加密后,老师对学员进行授权,一个账号绑定一台设备,学员的设备ID是唯一的,绑定一台硬件.这就是 ...

  2. python设计模式pdf_精通Python设计模式 高清晰PDF+源码

    精通Python设计模式讲述了16种基本设计模式,轻松解决软件设计常见问题:借力高效的Python语言,用现实例子展示各模式关键特性. 本书用实际生活中的例子带你了解常用的设计模式,介绍了诸多有关编写 ...

  3. 视频加密中的“一机一码”是什么意思?

    视频相比文字等展示,在声话视觉等方面有更立体的感受.而且随着网络硬件的发展,视频在我们生活中占据的比例越来越大.产品说明.场景演示都越来越多采用视频的形式.而线上教育.原创视频等对于自有版权的视频,想 ...

  4. python统计套利_清华编程高手尹成带你基于算法实践python量化交易

    清华编程高手尹成带你基于算法实践python量化交易 量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种"大概率"事件以制定策 ...

  5. 小学生python游戏编程2----飞机大战1

    小学生python游戏编程2----飞机大战1 前言 主要设计 1.界面设计 2.动态背景 3.记分的实现 4.射击游戏功能的实现 5.声音的实现 应用知识点 1.python知识点 1.1 角色创建 ...

  6. 分享Python采集99个VB源码,总有一款适合您

    分享Python采集99个VB源码,总有一款适合您 Python采集的99个VB源码下载链接:https://pan.baidu.com/s/1Ljs41rWn_WxvGqFWCkmGsA?pwd=1 ...

  7. Python源码学习笔记:Python程序执行过程与字节码

    Python程序执行过程与字节码 注:本篇是根据教程学习记录的笔记,部分内容与教程是相同的,因为转载需要填链接,但是没有,所以填的原创,如果侵权会直接删除. 问题: 我们每天都要编写一些Python程 ...

  8. python一元线性回归算法_6一元线性回归_清华编程高手尹成带你基于算法实践python量化交易_其他视频-51CTO学院...

    清华编程高手尹成带你基于算法实践python量化交易 量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种"大概率"事件以制定策 ...

  9. PDF防传播防复制一机一码制作教程版权在我手

    众所周知PDF文档是一种非常流行的文档,但是也存在致命的缺点,那就是文档可复制性,导致PDF文档原创作者版权收到担忧,时常个人原创的PDF文档内容被他人复制传播,自己的劳动成果变得一文不值,实在是降低 ...

最新文章

  1. java对象的强引用,软引用,弱引用和虚引用
  2. Java学习之路(七):泛型
  3. python mro c3_Python 19 MRO和C3算法
  4. android 根据bounds坐标进行点击操作_炫酷的Android时钟UI控件,隔壁产品都馋哭了...
  5. javascript对象的property和prototype是这样一种关系
  6. 码农们来一起讨论下数据库设计....
  7. 加密与解密 linux,security 02: 加密与解密 、 扫描与抓包 、 总结和答疑 、 SELinux安全防护(示例代码)...
  8. string类型输入一行字符串,带空格
  9. java基本数据类型之间的转换
  10. Delphi--“Range check error“ 错误解决方案之一
  11. 转载:Xshell使用教程
  12. Linux中的screen命令使用
  13. 数据库设计——关系数据理论(超详细)
  14. WAL日志磁盘空间占用大小分析
  15. FT5316调试记录
  16. 机器学习/深度学习入门资料汇总
  17. 监控器怎样连接到云服务器,一步步教你使用云端服务器yeelink远程监控
  18. chrome播放音频报错 play failed because....
  19. 最优化学习 算法收敛性
  20. php allow furl open,如何阻止來自iframe的彈出窗口?

热门文章

  1. 关于eclipse中没有js代码提示的解决
  2. python画热力分布图 pil_Python画attention map与原图叠加的热力图
  3. C Primer Plus (第6版) 读书笔记_Chapter 2
  4. TradingView - K线 使用详解
  5. 通过C#生成支付宝收款码 三(支付宝官方SDK配合沙箱调试扫条码支付)
  6. STC管脚上电复位低电平解决方法
  7. error: non-ASM statement in naked function is not supported
  8. 精美Bootstrap二手物品交易市场模板Html
  9. 《利用python进行数据分析》读书笔记--第九章 数据聚合与分组运算(一)
  10. idea中添加类、方法注释,快捷键设置