如何加密Python程序

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

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

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

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

一、获取本机机器码

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

如何加密Python程序_第1张图片

下面给出客户端获取机器码的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()

二、算出注册码

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

如何加密Python程序_第2张图片

由于一台电脑的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是不错的开源模块,可视化的界面使程序的运行更加的友好,是新手小白应该学习和掌握的可视化框架。

你可能感兴趣的:(python,基础操作,python,开发语言)