如何加密Python程序

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

有效的方法一是可以上传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是不错的开源模块,可视化的界面使程序的运行更加的友好,是新手小白应该学习和掌握的可视化框架。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PythonFun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值