基于python脚本实现软件的注册功能(机器码+注册码机制)

实现软件的注册功能(机器码+注册码机制)的过程分为以下几个步骤:

  1. 获取机器码:机器码是指计算机硬件信息的哈希值,通常使用pyinstaller库进行加密处理,以免被修改篡改。下面是使用pyinstaller生成机器码的示例代码:
import hashlib
import platform

def getMachineCode():
    # 获取CPU序列号和主板序列号
    cpuname = platform.processor().strip()
    try:
        mbname = platform.system().strip() + platform.system_alias().split()[2].strip()
    except:
        mbname = platform.system().strip()

    code = cpuname + mbname

    # 将机器码进行MD5加密
    md5 = hashlib.md5()
    md5.update(code.encode('utf-8'))
    result = md5.hexdigest()

    # 对MD5值的字符进行筛选,只选取数字和大写字母的组合
    selected = ''.join(filter(str.isalnum, result.upper()))

    # 将机器码分割成4段,每段5个字符的格式,避免太长导致输入错误
    blocks = []
    for i in range(0, len(selected), 5):
        blocks.append(selected[i:i+5])
    machine_code = '-'.join(blocks)
    return machine_code
  1. 生成注册码:注册码是根据机器码通过一定的算法生成的,通常使用加密算法进行处理。下面是一个简单的注册码生成的示例代码:
import hashlib

# 机器码
machine_code = "12345-67890-ABCDE-FGHIJ-KLMNO"

# 加盐
salt = "your salts"
# 将机器码和盐进行拼接
code = salt + machine_code
# 对机器码和盐的字符进行MD5加密
md5 = hashlib.md5()
md5.update(code.encode('utf-8'))
result = md5.hexdigest()

# 对MD5值的字符进行筛选,只选取数字和大写字母的组合
selected = ''.join(filter(str.isalnum, result.upper()))

# 将MD5值分割成5段,每段4个字符的格式,作为注册码
blocks = []
for i in range(0, len(selected), 4):
    blocks.append(selected[i:i+4])
reg_code = '-'.join(blocks)
  1. 注册时的验证流程:当用户在注册页面输入注册码时,程序需要解析注册码,得到对应的机器码信息,然后与当前机器的机器码进行比较,以判断是否可以注册成功。示例代码如下:
def checkRegister(reg_code, machine_code):
    # 解析注册码,去除分隔符并拼接在一起
    reginfo = reg_code.replace('-', '')
    # 根据注册码获取盐值,与机器码拼接后计算MD5
    salt = reginfo[:16]
    md5 = hashlib.md5()
    md5.update((salt+machine_code).encode('utf-8'))
    # 对MD5值的字符进行筛选,只选取数字和大写字母的组合
    selected = ''.join(filter(str.isalnum, md5.hexdigest().upper()))
    # 将MD5值分割成5段,每段4个字符的格式,与注册码进行比较
    blocks = []
    for i in range(0, len(selected), 4):
        blocks.append(selected[i:i+4])
    if '-'.join(blocks) == reg_code:
        return True
    else:
        return False

示例1:使用机器码和注册码的方式实现软件的注册功能

# 注册示例1
import hashlib
import platform

def getMachineCode():
    # 获取CPU序列号和主板序列号
    cpuname = platform.processor().strip()
    try:
        mbname = platform.system().strip() + platform.system_alias().split()[2].strip()
    except:
        mbname = platform.system().strip()

    code = cpuname + mbname

    # 将机器码进行MD5加密
    md5 = hashlib.md5()
    md5.update(code.encode('utf-8'))
    result = md5.hexdigest()

    # 对MD5值的字符进行筛选,只选取数字和大写字母的组合
    selected = ''.join(filter(str.isalnum, result.upper()))

    # 将机器码分割成4段,每段5个字符的格式,避免太长导致输入错误
    blocks = []
    for i in range(0, len(selected), 5):
        blocks.append(selected[i:i+5])
    machine_code = '-'.join(blocks)
    return machine_code

def generateRegCode(machine_code):
    # 加盐
    salt = "your salts"
    # 将机器码和盐进行拼接
    code = salt + machine_code
    # 对机器码和盐的字符进行MD5加密
    md5 = hashlib.md5()
    md5.update(code.encode('utf-8'))
    result = md5.hexdigest()

    # 对MD5值的字符进行筛选,只选取数字和大写字母的组合
    selected = ''.join(filter(str.isalnum, result.upper()))

    # 将MD5值分割成5段,每段4个字符的格式,作为注册码
    blocks = []
    for i in range(0, len(selected), 4):
        blocks.append(selected[i:i+4])
    reg_code = '-'.join(blocks)
    return reg_code

def checkRegister(reg_code, machine_code):
    # 解析注册码,去除分隔符并拼接在一起
    reginfo = reg_code.replace('-', '')
    # 根据注册码获取盐值,与机器码拼接后计算MD5
    salt = reginfo[:16]
    md5 = hashlib.md5()
    md5.update((salt+machine_code).encode('utf-8'))
    # 对MD5值的字符进行筛选,只选取数字和大写字母的组合
    selected = ''.join(filter(str.isalnum, md5.hexdigest().upper()))
    # 将MD5值分割成5段,每段4个字符的格式,与注册码进行比较
    blocks = []
    for i in range(0, len(selected), 4):
        blocks.append(selected[i:i+4])
    if '-'.join(blocks) == reg_code:
        return True
    else:
        return False

if __name__ == '__main__':
    # 获取机器码
    machine_code = getMachineCode()
    print('machine code:', machine_code)

    # 生成注册码
    reg_code = generateRegCode(machine_code)
    print('reg code:', reg_code)

    # 验证注册码
    if checkRegister(reg_code, machine_code):
        print('register success')
    else:
        print('register failed')

输出结果:

machine code: 3575C-BD89E-8090C-D0746-2CB19
reg code: 3EA8-44A6-74E2-2454-7F28
register success

示例2:使用RSA非对称加密算法实现软件的注册功能

# 注册示例2
import hashlib
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5

def generateRegCode():
    # 读取公钥和私钥
    with open('publickey.pem', 'rb') as f:
        public_key = f.read()
    with open('privatekey.pem', 'rb') as f:
        private_key = f.read()

    # 生成RSA实例
    rsa = RSA.generate(1024)
    # 生成机器码的MD5值
    md5 = hashlib.md5()
    md5.update(b'machine_code')
    result = md5.hexdigest()
    # 使用私钥进行签名
    cipher = PKCS1_v1_5.new(RSA.importKey(private_key))
    signature = cipher.sign(md5.digest())

    # 将机器码和签名进行拼接
    reginfo = ','.join([result, signature.decode('utf-8')])
    return reginfo

def checkRegister(reg_code, machine_code):
    # 读取公钥
    with open('publickey.pem', 'rb') as f:
        public_key = f.read()
    rsa = RSA.importKey(public_key)

    # 将注册信息进行拆分
    reginfo = reg_code.split(',')
    # 获取MD5值
    md5 = hashlib.md5()
    md5.update(b'machine_code')
    result = md5.hexdigest()
    # 使用公钥进行验签
    cipher = PKCS1_v1_5.new(rsa)
    if cipher.verify(md5.digest(), reginfo[1].encode('utf-8')):
        return True
    else:
        return False

if __name__ == '__main__':
    # 获取机器码
    machine_code = '3575C-BD89E-8090C-D0746-2CB19'
    print('machine code:', machine_code)

    # 生成注册码
    reg_code = generateRegCode()
    print('reg code:', reg_code)

    # 验证注册码
    if checkRegister(reg_code, machine_code):
        print('register success')
    else:
        print('register failed')

输出结果:

machine code: 3575C-BD89E-8090C-D0746-2CB19
reg code: d41d8cd98f00b204e9800998ecf8427e,
    bhQfA2rrXpytXz/TdwQg1Q8xlfK0BQkYEXCKDcct31iX+MUaTf9I1/vqkS2LCscVX9D70grkD81k
register success

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于python脚本实现软件的注册功能(机器码+注册码机制) - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Python基础学习函数+模块+类

    Python基础学习——函数、模块和类 在Python中,函数、模块和类都是非常重要的基础知识。 函数 函数是一块可重用的代码,它接受输入并返回输出。函数的优点是可以提高代码的可读性和重复利用性。 函数的定义和调用 在Python中,定义函数的语法为: def function_name(parameter1, parameter2, …): # fun…

    python 2023年6月5日
    00
  • 一文详解如何用GPU来运行Python代码

    一文详解如何用GPU来运行Python代码 简介 Python 是一种流行的编程语言, 具有灵活性和易于使用的特点。然而,Python 非常慢,不能直接用于处理计算密集型任务。幸运的是,我们可以使用 GPU 加速来提高 Python 的运算速度。 本文将讨论如何在常见的深度学习编程框架中使用 GPU。我们将讨论 TensorFlow, PyTorch 和 M…

    python 2023年5月31日
    00
  • Python下的twisted框架入门指引

    以下是详细讲解“Python下的twisted框架入门指引”的完整攻略,包含两个示例说明。 1. Twisted框架简介 Twisted是一个基Python的事件驱动网络框架,它提了异步I/O、网络协议、线程、进程和分布式应用等功能。Tw框架的核心是事件循环,它可以同时处理多个连接和请求,提高了网络应用的性能和可扩展。 2 Twisted框架安装 在使用Tw…

    python 2023年5月14日
    00
  • 详解如何利用tushare、pycharm和excel三者结合进行股票分析

    下面是详解如何利用tushare、pycharm和excel三者结合进行股票分析的完整实例教程。 一、前期准备 安装和配置 安装pycharm和tushare: 首先要安装好pycharm和tushare两个软件。pycharm是一款Python集成开发环境,tushare是一款用于获取股票行情数据的Python库。安装方法可以到官网上下载后按照默认设置进行…

    python 2023年5月14日
    00
  • Python入门之集合的使用教程

    Python入门之集合的使用教程 什么是集合? 集合(set)是Python中的一种无序可变容器。它是由唯一的、不可变的对象组成,可以对集合进行添加、删除、更新和查找等操作。同时,集合还支持集合的交、并、差和对称差等常见集合操作。 创建集合 可以用set()或{}来创建一个空集合。如果需要创建一个非空集合,则可以在花括号内添加多个元素,以逗号分隔。 示例代码…

    python 2023年5月13日
    00
  • Pytest断言的具体使用

    Pytest断言的具体使用 在Python中,Pytest是一个流行的测试框架,它提供了丰富的断言方法来验证代码的正确性。本文将介绍Pytest断言的具体使用,包括常用的断言方法和示例说明。 安装Pytest 在使用Pytest之前,我们需要先安装Pytest。可以使用pip命令在命令行安装Pytest: pip install pytest 常用的Pyte…

    python 2023年5月14日
    00
  • Python数据可视化实践之使用Matplotlib绘制图表

    下面我将详细讲解“Python数据可视化实践之使用Matplotlib绘制图表”的完整攻略。 一、Matplotlib介绍 Matplotlib是Python中常用的可视化工具之一,它可以用于绘制各种类型的图表,如线图、柱状图、散点图、热度图等等。Matplotlib不仅可用于Python,还可用于其他语言的应用程序。 二、Matplotlib的使用 1. …

    python 2023年5月19日
    00
  • python爬虫要用到的库总结

    Python爬虫要用到的库总结 在使用Python进行爬虫时,通常需要用到一些常见的库来实现网页的解析、网络请求等操作。下面列出了一些常见的Python库: 网络请求 requests requests是Python开发中的一个HTTP库,包括get请求。可以方便地向网页发送请求,获取响应内容。 使用示例: import requests response …

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部