> 技术文档 > 2025-07-25设置使用权限N次内

2025-07-25设置使用权限N次内

import os
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64

—————————————— 配置区域 ——————————————

LICENSE_FOLDER = r’C:\\free’
LICENSE_FILE = os.path.join(LICENSE_FOLDER, ‘license.dat’)

密钥(必须是16、24或32字节长度)

KEY = b’mysecretpassword’ # 16 bytes

开发者信息

DEVELOPER_INFO = “”\"
⚠️ 已超过试用次数,请联系开发者购买正式版!

📧 邮箱: developer@example.com
📞 电话: 123-4567-8901
🔗 官网: https://www.example.com
“”\"

—————————————— 加密工具函数 ——————————————

def encrypt(data: str) -> str:
“”“AES加密数据并返回Base64编码字符串”“”
cipher = AES.new(KEY, AES.MODE_CBC)
ct_bytes = cipher.encrypt(pad(data.encode(‘utf-8’), AES.block_size))
iv = base64.b64encode(cipher.iv).decode(‘utf-8’)
ct = base64.b64encode(ct_bytes).decode(‘utf-8’)
return f\"{iv}:{ct}\"

def decrypt(data: str) -> str:
“”“解密AES加密的Base64字符串”“”
iv, ct = data.split(‘:’)
iv = base64.b64decode(iv)
ct = base64.b64decode(ct)
cipher = AES.new(KEY, AES.MODE_CBC, iv)
pt = unpad(cipher.decrypt(ct), AES.block_size).decode(‘utf-8’)
return pt

—————————————— 授权管理 ——————————————

def ensure_license_file():
if not os.path.exists(LICENSE_FOLDER):
os.makedirs(LICENSE_FOLDER)

if not os.path.exists(LICENSE_FILE): default_data = \"1\\n3\" # 初始运行次数为1,最大允许3次 encrypted = encrypt(default_data) with open(LICENSE_FILE, \'w\') as f: f.write(encrypted)

def read_run_count():
with open(LICENSE_FILE, ‘r’) as f:
encrypted_data = f.read()
decrypted_data = decrypt(encrypted_data)
run_count, max_runs = map(int, decrypted_data.strip().split(‘\\n’))
return run_count, max_runs

def update_run_count(new_count, max_allowed=3):
new_data = f\"{new_count}\\n{max_allowed}\"
encrypted = encrypt(new_data)
with open(LICENSE_FILE, ‘w’) as f:
f.write(encrypted)

def check_license():
ensure_license_file()
try:
run_count, max_allowed = read_run_count()
except Exception as e:
print(f\"[错误] 授权文件损坏或被篡改:{e}\")
print(DEVELOPER_INFO)
input(“按回车键退出…”)
return False

if run_count > max_allowed: print(DEVELOPER_INFO) input(\"按回车键退出...\") return Falseprint(f\"这是第 {run_count} 次运行,剩余可用次数:{max_allowed - run_count}\")return True

—————————————— 文件重命名功能 ——————————————

def batch_rename_files(folder_path, prefix=‘file_’, file_extension=None):
files = os.listdir(folder_path)

if file_extension: files = [f for f in files if f.endswith(file_extension)]files.sort()for i, filename in enumerate(files, start=1): name, ext = os.path.splitext(filename) new_name = f\"{prefix}{i:03d}{ext}\" old_path = os.path.join(folder_path, filename) new_path = os.path.join(folder_path, new_name) os.rename(old_path, new_path) print(f\"Renamed: {filename} -> {new_name}\")

—————————————— 主程序入口 ——————————————

def main_program():
folder = r\"D:\\70免费试用8次\\images\" # 替换为你自己的文件夹路径
prefix = “photo_”
extension = “.png” # 可选,如 .png / .txt / None 表示所有文件

print(f\"\\n正在处理文件夹:{folder}\")batch_rename_files(folder, prefix=prefix, file_extension=extension)print(\"✅ 文件重命名完成。\")

—————————————— 启动脚本 ——————————————

if name == “main”:
if check_license():
main_program()
current_run, max_run = read_run_count()
update_run_count(current_run + 1, max_run)
print(“✅ 脚本运行完成。”)
else:
print(“❌ 脚本因授权限制未能运行。”)