加密和授权
- 一、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_())
对以上代码不再做解释,感兴趣的朋友可以自己查一下用法和意思。