辛苦写了一个脚本,但是不想让别人无限转发和分享,还想设置有效期或者绑定对方mac地址,或者想实现脚本收费,那如何实现?
思路如下:
- 如何生成一个加密的License文件。
- 如何做License内容核验。
- 如何加密Python代码
实现流程
一、我的脚本
随便写一个python脚本main.py,待会要给他加上校验
#!/bin/env python3 def function(): print('我是脚本主程序') function()
安装依赖库,否则python引用加密库依赖会报错
pip install pycryptodome
二、编写生成license脚本并生成license文件
#!/usr/bin/env python3 from Crypto.Cipher import AES from binascii import b2a_hex #定义加密函数 def encrypt(content): # 校验密钥是否为16或16的倍数 while len(content) % 16: content += ' ' #把密钥编码为utf-8 content = content.encode('utf-8') #cwillchris123321为加密密钥(必须16位) aes = AES.new(b'cwillchris123321', AES.MODE_CBC, b'cwillchris123321') #对密钥进行aes加密 encrypted_content = aes.encrypt(content) #返回二进制数据的十六进制表示 return(b2a_hex(encrypted_content)) #生成licence文件 def gen_license_file(): license_file = './License.dat' #设置对方mac和脚本使用的有效期 with open(license_file, 'w') as LF: #此处填入对方mac地址 LF.write('MAC : 00:0c:29:a0:be:24\n') #此处填入你设置的有效期 LF.write('Date : 20231231\n') #生成签名,防止对方篡改 sign = encrypt('00:0c:29:a0:be:24#20231231') #将生成的签名进行utf-8编码后写入license文件 LF.write('Sign : ' + str(sign.decode('utf-8')) + '\n') if __name__ == '__main__': #执行生成licence函数 gen_license_file()
我们用这个脚本生成license