python

超轻量级php框架startmvc

Python Des加密解密如何实现软件注册码机器码

更新时间:2020-08-19 03:42:01 作者:startmvc
这篇文章主要介绍了PythonDes加密解密如何实现软件注册码机器码,文中通过示例代码介绍的

这篇文章主要介绍了Python Des加密解密如何实现软件注册码机器码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

原理

  • 判断路径下是否存在识别文件,若存在就解密对比,若不存在就进入机器码注册:
  • 获取系统C盘序列号作为识别ID,并添加随机数作为混淆,生成最终机器码。
  • 将机器码发给软件开发者,开发者将机器码解密后,添加自己的标识符号并加密生成key,发给用户。
  • 用户输入key,程序对比并保存。
  • 用户下次打开软件时,重新开始步骤‘1'。

说明

  • 加密:将序列号经过Des加密,再经过base64编码。
  • 解密:将密码经过base64解码,再经过Des解密。
  • 写文件:将二进制字符转为十六进制保存。
  • 读文件:将十六进制转为二进制。

代码


# 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

效果

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