Python实现DES加密解密生成软件注册码与机器码

江岸
江岸
发布时间:2026-10-13| 7人浏览过
原创

本文介绍利用Python实现软件注册码验证机制。通过获取C盘序列号结合随机数生成机器码,使用DES加密配合Base64编码处理数据,实现注册文件的读写与校验。包含完整代码示例及效果演示,适用于软件保护场景。

Python DES加密解密软件注册码机器码实现教程

本文详细讲解如何利用Python中的DES加密与解密技术来生成和验证软件注册码及机器码,文中提供了详细的示例代码,对希望学习或应用该技术的读者具有参考价值。

注册码生成原理

原理

  • 系统首先检查指定路径下是否存在识别文件。如果文件存在,则对其进行解密并与当前状态进行对比;如果文件不存在,则进入机器码注册流程。
  • 获取系统C盘的卷序列号作为基础识别ID,并附加随机数进行混淆处理,从而生成最终的机器码。
  • 用户将生成的机器码发送给软件开发者。开发者对机器码进行解密,加入特定的标识符号(如Buy或Trial),再次加密生成密钥(key),并将该密钥发送给用户。
  • 用户输入接收到的密钥(key),程序对其进行对比验证,并将验证结果保存至本地文件。
  • 当用户下次启动软件时,系统将重新执行上述第1步的检查流程。

加密解密与文件处理说明

说明

  • 加密过程:首先对序列号执行DES加密操作,随后将结果进行Base64编码。
  • 解密过程:首先对输入的密码字符串进行Base64解码,随后执行DES解密操作。
  • 写入文件:将处理后的二进制字符转换为十六进制格式并保存至文件。
  • 读取文件:将文件中保存的十六进制数据转换回二进制格式。

Python代码实现

代码


# coding: utf-8
 
import win32api
import pyDes
from binascii import b2a_hex, a2b_hex
import base64
import os
def getCVolumeSerialNumber():
  CVolumeSerialNumber=win32api.GetVolumeInformation("C:\\")[1]
  # print(CVolumeSerialNumber)
  if CVolumeSerialNumber:
    return str(CVolumeSerialNumber)
  else:
    return 0
 
def DesEncrypt(str):
  k = pyDes.des(Des_Key, pyDes.CBC, Des_IV, pad=None, padmode=pyDes.PAD_PKCS5)
  encryptStr = k.encrypt(str)
  string = base64.b64encode(encryptStr)
  # print(string)
  return string # 转base64编码返回
 
def DesDecrypt(string):
  string = base64.b64decode(string)
  k = pyDes.des(Des_Key, pyDes.CBC, Des_IV, pad=None, padmode=pyDes.PAD_PKCS5)
  decryptStr = k.decrypt(string)
  # print(decryptStr)
  return decryptStr
 
Des_Key = "12345678" # Key
Des_IV = "12345678" # 自定IV向量
def Register():
  if os.path.isfile('conf.bin'):
    with open('conf.bin', 'rb') as fp:
      key = a2b_hex(fp.read())
      print(key)
    serialnumber = getCVolumeSerialNumber()
    decryptstr = DesDecrypt(key).decode('utf8')
    print(decryptstr)
    if serialnumber in decryptstr:
      if 'Buy' in decryptstr:
        print('>> Buy')
        print(">> 验证完成")
        return 1
      elif 'Trial' in decryptstr:
        print('>> Trial')
        return 2
  rand = str(random.randrange(1, 1000))
  serialnumber = getCVolumeSerialNumber() + rand
  print(serialnumber)
  encryptstr = DesEncrypt(serialnumber).decode('utf8')
  print(">> 序列号:", encryptstr)
  while True:
    key = input(">> 验证码:")
    try:
      decryptstr = DesDecrypt(key.encode('utf8')).decode('utf8')
      print(decryptstr)
      if serialnumber in decryptstr:
        if 'Buy' in decryptstr:
          print('>> Buy')
          with open('conf.bin', 'wb') as fp:
            fp.write(b2a_hex(key.encode('utf8')))
            print(">> 验证完成")
          return 1
        elif 'Trial' in decryptstr:
          print('>> Trial')
          return 2
    except Exception as e:
      print(e)
      print(">> 输入错误")
      continue

运行效果展示

效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。