基于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实现的阳历转阴历(农历)算法”的完整攻略,包含两个示例说明 阳历阴历 阳历是指以地球公转为基础的历法,也称为公历。阴历是指以月亮围地球运行基础的历法,也称为农历。 阳历转阴历算法 阳历转阴历算法是一种将阳历日期转换为阴历日期的算法。下面是一个示例代码,用于实现阳历转阴历算法: import datetime def lunar(y…

    python 2023年5月14日
    00
  • python爬虫学习笔记–BeautifulSoup4库的使用详解

    Python爬虫学习笔记–BeautifulSoup4库的使用详解 BeautifulSoup4是一个Python库,用于解析HTML和XML文档,并提供了一些方便的方法来获取和操作文档中的元素。它可以帮我们快速地从网页中提取所需的信息,是Python爬虫中常用的工具之一。 安装BeautifulSoup4 在使用BeautifulSoup4之前,需要确保…

    python 2023年5月15日
    00
  • 在服务器上安装python3.8.2环境的教程详解

    下面我将为您详细讲解在服务器上安装python3.8.2环境的教程。 确认系统环境 在开始安装Python3.8.2前,需要先确认当前系统的环境。在命令行中输入以下命令: uname -a 如果服务器系统是CentOS或者Red Hat,输出的信息应该类似于这样: Linux liudeMBP 3.10.0-229.el7.x86_64 #1 SMP Fri…

    python 2023年5月14日
    00
  • 字节跳动2019春招研发部分python编程题汇总

    下面我将详细讲解“字节跳动2019春招研发部分python编程题汇总”的完整攻略,过程中包含两条示例说明。 概述 “字节跳动2019春招研发部分python编程题汇总”包含15道Python编程题,难度不等,需要掌握Python基础和常见算法,具有较高的考察难度和实际工作中Python编程能力的要求。 准备工作 在开始做题前,需要准备好Python的开发环境…

    python 2023年5月13日
    00
  • 一些Python中的二维数组的操作方法

    在Python中,二维数组是常见的数据结构。本文将详细讲解一些Python中的二维数组的操作方法。 创建二维数组 在Python中,可以使用列表嵌套的方式来二维数组。下面是一个示例: # 示例1:创建二维数组 rows, cols = (3, 4) arr = [[0 for j in range(cols)] for i in range(rows)] p…

    python 2023年5月13日
    00
  • Python统计列表中的重复项出现的次数的方法

    我来为您提供Python统计列表中重复项出现次数的方法攻略。 方法一:使用Python内置的Counter函数 使用Python的collections库中内置的Counter函数来完成统计操作。Counter函数可以将一个可迭代对象的各项元素出现次数统计出来,返回一个字典,字典键是元素,字典值是元素出现的次数。 示例代码: from collections…

    python 2023年6月3日
    00
  • Matplotlib animation模块实现动态图

    下面是详细讲解Matplotlib animation模块实现动态图的完整攻略。 1. 简介 Matplotlib是一个可视化工具,它的animation模块为我们提供了创建动态图的功能。animation模块通常使用FuncAnimation函数来生成动态图,其中可以使用用户自定义的函数来实现动态效果,同时也可以通过一些参数来控制其行为,比如进行循环、控制…

    python 2023年5月18日
    00
  • Python Flask 实现 HTML 文件压缩案例代码(9 级压缩)

    下面是使用Python Flask实现HTML文件压缩的攻略: 安装Flask和Gzip 在开始之前,需要确保已经安装了Flask和Gzip。可以使用以下命令安装它们: pip install Flask pip install Flask-Gzip 实现HTML文件压缩 在Flask应用程序中,可以使用Flask-Gzip扩展来实现HTML文件压缩。以下是…

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