Python实现DES加密解密生成软件注册码与机器码
本文介绍利用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
运行效果展示
效果


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













