最强大脑记忆曲线(13)--应用程序的加密及授权码的实现

news2024/11/15 17:35:25

加密和授权

  • 一、python程序加密与授权的思考
  • 二、python文件 加密
  • 三、注册机代码

目前我的小项目“最强大脑记忆曲线”已经可以出1.0版了,发布之前的最后一个环节就是给应用程序加密,并增加授权码了。关于这些,我之前思考过很多,因为自己不是一个专业的程序开发人员,没有同行者,遇到困难不知道向谁求助,所有东西全凭“百度+自己领会”。今年5月份研究过一段时间这个问题,转眼半年过去了,我感觉自己又忘完了,所以这个思考过程是值得记录的,以备后用。

一、python程序加密与授权的思考

【先说反编译】
曾经百度到过以下信息:python程序在使用pyinstaller打包后,将pyinstxtractor.py放入待反编的程序目标下,执行pyinstxtractor XXX.exe,会对应生成一个文件夹,在文件夹中有XXX.pyc文件。再用Easy Python Decompiler V1.3.2 反编pyc文件,成功后,用文本编辑工具可查看XXX.dis的文件。
以上描述,我没有试过,感兴趣的可以试试。
【再说加密】
百度到Virbox Protector 加壳工具对EXE文件直接进行加壳保护,可防反编。此外,若需对加密后的软件授权使用,可使用VirboxLM授权方案,使用云锁/软锁/加密锁来配合加密,这样用户拿到加密后的软件及授权才能使用。同时可以做限时、限次、限功能、限模块等订阅式销售。
读到此,我感觉到这是一款收费软件,这并不是我需要的,我希望自己完成。

之后又查了PyArmor的使用方法,有点没看懂,好像也是一个共享软件,安装后处于试用模式下,有些限制,如果购买,好像需要支付一定的费用。

【开窍】
你所坚持的,一定会在某一天来到你身边。
四天之后,我看到visio弹出一条提示:输入你的产品密钥:25个字符位。还提示:虽然您不必输入您的产品密钥,但建议您输入,以便验证您的Micro… office许可证。
我就在想,这个密钥在哪儿呢?为什么我输入一个SN后,系统就知道我输入的是对的呢?

再百度SN,我理解软件注册码,一般是以CP硬件为注册源,通过一定算法即注册机形成注册码。
如果客户把其硬件信息发给我,我是不是可以通过一定的加密算法,计算出一串“注册码”来? 然后客户机器上也有同样一套加密算法,我把可用的注册码授权给客户,客户输入后,系统把两套加密的结果一对比,就可以知道是否授权通过了。原理就是这样的:
在这里插入图片描述

二、python文件 加密

把之前总结的直接贴过来吧,不再一行一行打字了:

在这里插入图片描述

三、注册机代码

class QmyGenerator(QWidget):
    Des_Key = "123@2456"  # 要调整
    Des_IV = "^#12434!"  # 要调整

    def __init__(self, parent=None):
        super().__init__(parent)  # 调用父类构造函数,创建窗体
        self.ui = Ui_Generator()  # 创建UI对象
        self.ui.setupUi(self)  # 构造UI界面

        self.ui.pushButton.clicked.connect(self.do_gener)

    def do_gener(self):
        str = self.ui.lineEdit.text()
        k = des(self.Des_Key, CBC, self.Des_IV, pad=None, padmode=PAD_PKCS5)
        EncrptStr = k.encrypt(str)
        # print('加密后的信息是{},类型是:{}.'.format(EncrptStr, type(EncrptStr)))
        # print('b64encode后的信息是{},类型是{}。'.format(base64.b64encode(EncrptStr), type(base64.b64encode(EncrptStr))))
        a = base64.b64encode(EncrptStr).decode('utf-8')
        # print(a)
        self.ui.lineEdit_2.setText(a)


# #  ============窗体测试程序 ================================
if __name__ == "__main__":  # 用于当前窗体测试
    app = QApplication(sys.argv)  # 创建GUI应用程序
    form = QmyGenerator()  # 创建窗体
    form.show()
    sys.exit(app.exec_())

对以上代码不再做解释,感兴趣的朋友可以自己查一下用法和意思。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/61499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】二叉树OJ练习

👑作者主页:进击的安度因 🏠学习社区:进击的安度因(个人社区) 📖专栏链接:数据结构 文章目录一、二叉树的最小深度二、单值二叉树三、相同的树四、另一棵树的子树五、翻转二叉树六、…

毫米波传感器原理介绍:测速_1相位

在前文中,我们分析了 IF信号的频率,并展示了该频率与物体到雷达的距离 成正比。在本文中,我们将探讨IF 信号的相位。如果我们希望了解 FMCW 雷达响应物体极小位移的能力,那么研究相位就非常重要。雷达正是凭此非常快速且准确地测量…

Java 基础之线程

线程是 cpu 可以调度的最小单元,多线程可以利用 cpu 轮询时间片的特点,在一个线程进入阻塞状态时,快速切换到其余线程执行其余操作,减少用户的等待响应时间。所以我们需要了解线程的基本概念,如何启动线程以及怎么去控…

最短路径(Dijkstra算法与Floyd算法)

一、Dijkstra算法 Dijkstra算法与之前学习过的Prim算法有些相似之处。我们直接通过一个例子来讲解 假设要求的是A->E之间的最短路径。首先我们来列出顶点A到其他各顶点的路径长度:A->D 2,A->B 6,A->C 1,A->E…

MySQL主从复制

MySQL主从复制 MySQL主从复制原理 主服务器在更新数据前,会写入硬盘,银盘在再将数据写入二进制日志 从服务器开启I/O线程,Master节点为每个I/O线程启动一个dump线程用于发送二进制事件到从服务器的中继日志中 从服务器的sql线程开启&…

springboot集成dubbo配置多注册中心

1 dubbo多注册中心 dubbo可以支持多注册中心&#xff0c;以及多协议, 本文示例dubbo同时注册到nacos和zookeeper注册中心&#xff1a; 在前文基础上&#xff0c;给provider consumer模块加上zookeeper依赖&#xff1a; <dependency><groupId>org.apache.dubbo<…

TypeScript26(TS进阶用法Record Readonly)

Readonly Readonly与我们上一章节学的Partial 很相似&#xff0c;只是把? 替换成了 Readonly // 源码 type Readonly<T> {readonly [P in keyof T]: T[P]; }; 疑问&#xff1a; keyof 是干什么的&#xff1f; in 是干什么的&#xff1f; Readonly 是将该属性变为…

【HBU】数据结构第一次月测题(线性结构)

数据结构第一次月测题 判断题&#xff1a; 1.在具有N个结点的单链表中&#xff0c;访问结点和增加结点的时间复杂度分别对应为O&#xff08;1&#xff09;和O&#xff08;N&#xff09; F 访问节点的时间复杂度为O(N) 2.对于顺序存储长度为N的线性表&#xff0c;…

DataBinding原理----双向绑定(4)

前面的几种文章分析了DataBinding单向数据绑定的原理&#xff0c;今天来看看双向数据绑定是怎么回事。 我们知道单向绑定是在数据发生变化的时候能够通知到UI&#xff0c;让数据的变化能够及时反应到UI上&#xff1b;而双向绑定则是不仅要让数据的变化能够反馈到UI上&#xff0…

web前端-javascript-立即执行函数(说明、例子)

立即执行函数 /* (function(){alert("我是一个匿名函数~~~"); })(); */(function (a, b) {console.log("a " a);console.log("b " b); })(123, 456);1. 说明 函数定义完&#xff0c;立即被调用&#xff0c;这种函数叫做立即执行函数立即执…

Twitter群推解锁流量大门的钥匙

Twitter作为全球最知名的社交媒体平台之一&#xff0c;对海外营销有着巨大的影响力&#xff0c;是外贸企业进行群推、群发、引流必不可少的平台。那么要想通过推特群推、推特群发打开流量的大门&#xff0c;这里有几点值得大家注意&#xff0c;帮助你更好的驾驭流量&#xff1a…

虚拟机安装zookeeper集群

一、准备 克隆原先的虚拟机;因为是从原先已有jdk和zk的linux虚拟机克隆过来的,所以克隆的虚拟机上是一样的! 三台虚拟机,我采用的是:zk的ip不一样,端口一样 修改每台虚拟机上环境变量,zk配置文件 修改zookeeper配置文件,采用默认端口,配置主从节点

Bootstrap主页面搭建(十四)

创建主页面&#xff1a;index.jsp&#xff1a; 引入bootstrap依赖&#xff1a; 首先写导航条&#xff0c;复制代码更改&#xff1a; <!--导航条--> <nav class"navbar navbar-inverse"><div class"container-fluid"><!-- Brand and…

Nginx配置实例-动静分离

1、什么是动静分离 Nginx动静分离简单来说就是把动态跟静态请求分开&#xff0c;不能理解成只是单纯的把动态页面和 静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开&#xff0c;可以理解成使用Nginx 处理静态页面&#xff0c;Tomcat处理动态页面。 动静分离从目…

Project joee 算法开发日志(一)

目录一. 下载并安装TensorRT1.1 下载安装TensorRT1.2 验证TensorRT安装是否成功二. 安装并测试Windows预测库2.1 安装cuda11.0_cudnn8.0_avx_mkl-trt7.2.1.6 预测库2.2 测试精度损失2.3 推理速度测试三. 总结开发机器配置&#xff1a;CPU: AMD5800 8core 16ThreadGPU: NVIDIA G…

微信支付回调,内网穿透详细过程

文章目录支付回调接口通过Ngrok进行内网穿透步骤1. 根据邮箱注册一个账号2. 获取隧道id3.下载Ngrok客户端4. 双击这个 Sunny-Ngrok启动工具.bat 文件5. 填写你的 隧道id 回车6.客户端启动成功7. 所以你的notify_url对应的value需要改为内网穿透的地址为8.支付成功之后微信平台会…

分面中添加直线

简介 这篇也是分享最近统计建模中所绘制的一副图形。总体而言和前面的几篇&#xff1a;xxx 类似。都是从“数据导入”到“基于分面的可视化”。但是本文的小技巧是&#xff0c;在不同的分面中添加直线。最后得到的图形如下&#xff1a; 注意&#xff1a;本文数据和代码在公众号…

交易所通用质押式回购

一、专业术语 逆回购&#xff1a;指资金融出方将资金融给资金融入方&#xff0c;收取有价证券作为质押&#xff0c;并在未来收回本息&#xff0c;并解除有价证券质押的交易行为。 债券通用质押式回购交易&#xff1a;&#xff08;简称“通用回购”&#xff09;是指资金融入方…

划分成绩ABCD

已知成绩等级划分为{“A”:[90~100],"B":[80~89],"c":[60~79],"D":[0~59]} 1、随机生成20个整数&#xff0c;范围0-100 2、按等级归类&#xff0c;输出成绩等级列表字典如下&#xff1a; {A: [96, 96, 97, 97, 100, 100], B: [86], C: [71, 7…

Python学习基础笔记二十二——生成器

一个包含yield关键字的函数就是一个生成器函数。yield可以为我们从函数中返回值&#xff0c;但是yield又不同于return&#xff0c;return的执行意味着程序的结束&#xff0c;调用生成器函数不会得到返回的具体的值&#xff0c;而是得到一个可迭代的对象。每一次获取这个可迭代对…