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 = "" # Key
Des_IV = "" # 自定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
效果


欢迎关注↓↓↓
头条号:小锋学长
微信公众号:xfxuezhang

Python Des加密与解密实现软件注册码、机器码的更多相关文章
- DES加密与解密在GET请求时解密失败的问题
DES加密与解密在GET请求时解密失败的问题 在数据进行加密后传递会更安全,但可能有个问题:就是Url编码问题,如果不对Url进行编码直接加密,那么在解密时,如果字符串存在 “+”,这种特殊符号,在解 ...
- 【Java】通过DES加密和解密工具,对字符串进行加密和解密操作
分享一个非常不错的字符串加密和解密的程序. 可以指定不同的密钥对同一字符串进行不同的加密操作,增强加密性能. Java代码如下: package com.app; import java.securi ...
- DES加密和解密PHP,Java,ObjectC统一的方法
原文:DES加密和解密PHP,Java,ObjectC统一的方法 PHP的加解密函数 <?php class DesComponent { var $key = '12345678'; func ...
- 一、DES加密和解密
一.DES加密和解密 原文:http://www.jb51.net/article/51879.htm 还有其他文章 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 ...
- python RSA加密、解密、签名
python RSA加密.解密.签名 python中用于RSA加解密的库有好久个,本文主要讲解rsa.M2Crypto.Crypto这三个库对于RSA加密.解密.签名.验签的知识点. 知识基础 加密是 ...
- 用python进行加密和解密——我看刑
加密和解密 密码术意味着更改消息的文本,以便不知道你秘密的人永远不会理解你的消息. 下面就来创建一个GUI应用程序,使用Python进行加密和解密. 在这里,我们需要编写使用无限循环的代码,代码将不断 ...
- Java DES 加密和解密源码(转)
原文地址:http://www.oschina.net/code/snippet_727646_18383 Java密码学结构设计遵循两个原则: 1) 算法的独立性和可靠性. 2) 实现的独立性和相互 ...
- java实现DES加密与解密,md5加密
很多时候要对秘要进行持久化加密,此时的加密采用md5.采用对称加密的时候就采用DES方法了 import java.io.IOException; import java.security.Messa ...
- DES加密And解密
加密分为:单向加密,双向加密和对称加密. 单向加密:通过对数据进行摘要计算生成密文,密文不可逆推还原.算法代表:Base64,MD5,SHA; 双向加密:与单向加密相反,可以把密文逆推还原成明文,双向 ...
随机推荐
- maven项目无法查看类库的源码
一个Maven项目有两种类库,分别是JRE System Libaray和Maven Dependencies. JRE System Libaray 一般有两种方法指定. 1.由pom.xml中的m ...
- iTerm2 半透明颜色主题与字体配置
下载iTerm2https://www.iterm2.com/ 安装. 下载这个主题https://raw.githubusercontent.com/mbadolato/iTerm2-Color-S ...
- B. Uniqueness(尺取)
B. Uniqueness time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- Redis启动后基础只是讲解
1.单进程 epoll是Linux内核为处理大批量文件描述符而作了改进的epoll,是Linux下多路复用IO接口select/poll的增强版本, 它能显著提高程序在大量并发连接中只有少量活跃的情况 ...
- 【java中的static关键字】
文章转自:https://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: ...
- ViewPager翻页控件简单使用方法
例子布局文件: 主activity布局文件:activity_view_pager.xml <?xml version="1.0" encoding="utf-8& ...
- MySQL中tinytext、text、mediumtext和longtext等各个类型详解
转: MySQL中tinytext.text.mediumtext和longtext等各个类型详解 2018年06月13日 08:55:24 youcijibi 阅读数 26900更多 个人分类: 每 ...
- 一百三十二:CMS系统之前端动态获取后台添加的轮播图
先准备几张轮播图 排序顺序改为根据优先级倒序排 前端首页接口 @bp.route('/')def index(): banners = BannerModel.query.order_by(Banne ...
- C++数据结构之排序
一.简单排序 冒泡排序: 插入排序: 逆序对 希尔排序:
- 利用subst命令将一个文件夹镜像成本地的一个磁盘
企业里都是只有一个c盘,因为这样安全性好,性能也好 那么有时候,我们是需要其他的系统盘来做一些事情的,比如远程的时候需要带过去一个系统盘,这个时候,就可以用subset这个命令来解决这个问题. 叫镜像 ...