如何加密Python程序

news2024/9/20 16:54:25

我们开发了一个项目,历尽艰辛,想发布出去,又怕别人窃取自己的劳动成果。

有效的方法一是可以上传github,分享源代码,其它想使用的朋友可以通过fork来进一步改进它。

对了,最近刚发现一个小技巧,如果你感觉访问github时速度不够快,我推荐可以在http://github.com这个网址上做个小手术,把github改为githubfast,这时你会发现速度明显快了一点。

另一种方法就是通过pyinstaller封装自己的源代码,然后给自己的软件加上注册码,只有输入正确的注册码,才能真正使用软件。

一、获取本机机器码

而注册码是通过获取本机的mac地址即机器码,然后经过uuid加密之后生成的一段由字母和数字构成的代码,可以自行设置长度。

下面给出客户端获取机器码的Python代码,用户只要运行此代码,即可获得自己电脑的机器码。

import tkinter as tk
import hashlib
import uuid

# 生成固定的机器码(使用MAC地址)
def generate_machine_code():
    mac = ':'.join(['{:02x}'.format((uuid.getnode() >> elements) & 0xff) for elements in range(0,2*6,2)][::-1])
    return mac

# 创建主窗口
window = tk.Tk()
window.title("客户端:获取机器码")
window.geometry("300x200")

# 生成固定的机器码和验证码
machine_code = generate_machine_code()

# 显示机器码
machine_code_label = tk.Label(window, text="您的机器码: " + machine_code)
machine_code_label.pack()

# 输入验证码
entry_label = tk.Label(window, text="您的机器码:")
entry_label.pack()

entry = tk.Entry(window)
entry.pack()
code = generate_machine_code()
def get_machine_code():
    entry.insert(tk.END,code)

# 验证按钮
verify_button = tk.Button(window, text="生成机器码", command=get_machine_code)
verify_button.pack()

# 显示验证结果
result_label = tk.Label(window, text="")
result_label.pack()

# 启动主循环
window.mainloop()

二、算出注册码

有了机器码,就可以通过自己设定的算法,来计算出注册码。

由于一台电脑的mac地址是固定的,所以机器码一般也是固定的,算出的注册码也是一样的,因此可以把加密后的机器码作为自己软件的注册码。主控端获取注册码的代码如下,这里面我们还加上了验证注册码是否合法的程序代码:

import tkinter as tk
import hashlib
import uuid
import tkinter.font as tkfont
# 生成固定的机器码(使用MAC地址)
def generate_machine_code():
    mac = ':'.join(['{:02x}'.format((uuid.getnode() >> elements) & 0xff) for elements in range(0,2*6,2)][::-1])
    return mac

# 生成固定的加密验证码
def generate_fixed_captcha(machine_code):
    # 使用SHA-256哈希机器码生成验证码
    sha256 = hashlib.sha256()
    sha256.update(machine_code.encode())
    captcha = sha256.hexdigest()[:20]  # 取前8位作为验证码
    return captcha

# 创建主窗口
window = tk.Tk()
window.title("软件注册")
window.geometry("300x200")
default_font = tkfont.nametofont("TkDefaultFont")
default_font.configure(size=12)  # 设置默认字体大小为12

# 显示机器码
machine_code = generate_machine_code()
machine_code_label = tk.Label(window, text="您的机器码: " + machine_code)
machine_code_label.pack()
print(machine_code)
# 输入机器码
entry_label = tk.Label(window, text="请输入机器码:")
entry_label.pack()

entry = tk.Entry(window,width=25)
entry.pack()

#生成验证码
entry1_label = tk.Label(window, text="机器码对应的注册码:")
entry1_label.pack()

entry1 = tk.Entry(window,width=25)
entry1.pack()

def get_captcha():
    # 生成固定的机器码和验证码
    fixed_captcha = generate_fixed_captcha(entry.get())
    entry1.insert(tk.END,fixed_captcha)

# 验证按钮
verify_button = tk.Button(window, text="生成注册码", command=get_captcha)
verify_button.pack()

# 显示验证结果
result_label = tk.Label(window, text="")
result_label.pack()

# 启动主循环
window.mainloop()

三、学后反思

1. 魔高一尺,道高一丈。以上的加密算法对于小白有效,但是对于大佬可能效果一般,如果非常重要的项目,注意保存源代码。

2. tkinter是不错的开源模块,可视化的界面使程序的运行更加的友好,是新手小白应该学习和掌握的可视化框架。

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

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

相关文章

如何使用 MSYS2 编译最新版的 coreutils 源码(目前最新版本为 coreutils-9.4)

文章目录 一、coreutils 源码下载二、MSYS2 安装编译工具1. pacman -Suy 更新软件仓库2. pacman -S msys/gcc 安装gcc3. pacman -S msys/make 安装make工具4. 解压缩 coreutils 压缩包5. 执行 ./configure 命令6. 执行 make 进行编译(cygwin-3.4.8版本的一个bug导致…

1.1 空间直角坐标系

1.空间直角坐标系的建立 三维空间中几何 空间图形形式 ----- 点 线 面 体 ↑ ↓ \uparrow\downarrow ↑↓ (空间直角坐标系作为桥梁帮助我们理解) 代数理论表达 — 坐标,方程(组) 2. 空间直角坐标系的定义 定义: 过…

Jmeter进阶使用指南-分布式测试

当你需要模拟大量并发用户并测试应用程序的性能时,JMeter的分布式测试功能非常有用。分布式测试允许你使用多个JMeter实例来模拟并发用户,从而提供更高的负载。 下面是一个详细的介绍和讲解分布式测试的步骤: 准备主机和从机: 首…

【代码随想录】Day 51 动态规划12 //待做//(买卖股票冷冻期、买卖股票手续费)

买卖股票冷冻期 https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/ 买卖股票手续费 https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/

【多思路附源码】2023高教社杯 国赛数学建模C题思路 - 蔬菜类商品的自动定价与补货决策

赛题介绍 在生鲜商超中,一般蔬菜类商品的保鲜期都比较短,且品相随销售时间的增加而变差, 大部分品种如当日未售出,隔日就无法再售。因此, 商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬…

LLM - Model、Data、Training、Generate Agruments 超参解析

目录 一.引言 二.常用参数 ◆ ModelArguments ◆ DataArguments ◆ TrainingArguments ◆ GeneratingArguments 三.代码实现 ◆ Python 代码 ◆ Shell 代码 四.总结 一.引言 LLM 相关训练框架都会引入 ModelArguments、DataArguments、TrainingArguments、Generatin…

MySQL 学习笔记

😀😀😀创作不易,各位看官点赞收藏. 文章目录 MySQL 学习笔记1、DQL 查询语句1.1、基本查询1.2、函数查询1.2.1、单行函数1.2.2、聚合函数 1.3、复杂查询1.3.1、连接查询1.3.2、子查询 1.4、SQL 语句 执行顺序 2、DDL 定义语句2.1、…

F. Selling a Menagerie Codeforces Round 895 (Div. 3)

Problem - F - Codeforces 题目大意:有n个动物,每个动物i有一个害怕的动物a[i],现要卖掉所有动物,每个动物都有价值c[i],如果i在a[i]之前卖掉,就会获得2*c[i]的价值,如果在a[i]之后被卖掉就会获…

垃圾回收 - 分代垃圾回收

分代垃圾回收在对象中导入了“年龄”的概念,通过优先回收容易成为垃圾的对象,提高垃圾回收的效率。 1、新生代对象和老年代对象 分代垃圾回收中把对象分类成几代,针对不同的代使用不同的 GC 算法,我们把刚生成的对象称为新生代对…

UI自动化测试详解

前言 随着智能化信息基础设施的推进,软件开发的进程也不断加快。软件测试工作也逐渐由传统的手工测试向软件自动化测试跨越。 对于很多企业来说,做好软件自动化测试工作已经不仅仅是通过测试工具进行“点点点”,要想找出软件测试过程中的缺…

python 小案例72

import requestsdef fetch_data_from_api(url):response requests.get(url)if response.status_code 200:data response.json()return dataelse:print("Failed to fetch data from API")return None# 使用NASA的API获取每日天文图片 url "https://api.nasa.…

【Springcloud】Actuator服务监控

【Springcloud】Actuator服务监控 【一】基本介绍【二】如何使用【三】端点分类【四】整合Admin-Ui【五】客户端配置【六】集成Nacos【七】登录认证【八】实时日志【九】动态日志【十】自定义通知 【一】基本介绍 (1)什么是服务监控 监视当前系统应用状…

情侣头像微信小程序源码 朋友圈背景小程序源码 动态壁纸微信小程序源码

壁纸和情侣头像,朋友圈素材都可以做,带视频教程。 搭建也不难,纯前端无后台。直接开发者工具调试前端,绑定合法域名,流量主功能也是在前端替换。 无需服务器域名直接上手!!!

飞行动力学 - 第17节-part3-垂尾和推进系统对航向的影响 之 基础点摘要

飞行动力学 - 第17节-part3-垂尾和推进系统对航向的影响 之 基础点摘要 1. 尾翼的贡献2. 垂尾是航向静稳定性的最大来源3. 推进系统对航向的贡献3.1 螺旋桨3.2 喷气式 4. 参考资料 1. 尾翼的贡献 平尾对航向静稳定性的影响机理与机翼相同,由于尺寸小,通…

AI教程 | 用Midjourney制作AI模特和换装的保姆级教程

Hi! 大家好,我是专注于AI项目实战的赤辰。 昨天电商朋友过来交流,聊到他最近新开了一家淘宝店,在没有请任何员工的情况下,他一个人用AI工具完成了店铺取名,商品文案,店铺logo,主图设计&#xf…

ASO优化之阅读并回复应用的评论

回复评论对于与用户保持牢固的关系非常重要。如果时间有限,优先回复负面评论,可以向其他用户保证,我们正在积极解决应用的问题,从而提高转化率。 1、逻辑与沟通要清晰。 首先,无论他们的反馈是正面还是负面&#xff0…

【c++】如何有效地利用命名空间?

​ 🌱博客主页:青竹雾色间 😘博客制作不易欢迎各位👍点赞⭐收藏➕关注 ​✨人生如寄,多忧何为 ✨ 目录 前言什么是命名空间?命名空间的语法命名空间的使用避免命名冲突命名空间的嵌套总结 前言 当谈到C编…

51单片机-直流电机学习

简介 51单片机采用的是5V的直流电机 轴长:8mm 轴径:2mm 电压:1-6V 参考电流:0.35-0.4A 3V 转速:17000-18000 转每分钟 他的组成: 直流电机的结构应由 定子 和 转子 两大部分组成。 直流电机运行时静止…

【Spring】aop的底层原理

🎄欢迎来到边境矢梦的csdn博文🎄 🎄本文主要梳理 Spring 中的切面编程aop的底层原理和重点注意的地方 🎄 🌈我是边境矢梦,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以…

工作和生活中,如何用项目管理思维解决复杂的事情?

在工作和生活中,许多事情都可以采用项目思维方式来解决。当我们逐渐将工作和生活中的各种事务以项目的方式来处理和推进时,我们可能并没有意识到,实际上我们正在运用项目管理思维。 项目管理思维能帮助我们在面对繁杂事务时,理清…