我们开发了一个项目,历尽艰辛,想发布出去,又怕别人窃取自己的劳动成果。
有效的方法一是可以上传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是不错的开源模块,可视化的界面使程序的运行更加的友好,是新手小白应该学习和掌握的可视化框架。