当前位置: 首页 > news >正文

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(“❌ 脚本因授权限制未能运行。”)

http://www.dtcms.com/a/297999.html

相关文章:

  • 《计算机组成原理与汇编语言程序设计》实验报告一 基本数字逻辑及汉字显示
  • OpenGLRender开发记录(二): 阴影(shadowMap,PCF,PCSS)
  • 升级目标API级别到35,以Android15为目标平台(三 View绑定篇)
  • Fluent自动化仿真(TUI命令脚本教程)
  • SQL Server数据库
  • 破局与重构:King’s LIMS 引领电子行业实验室智能化转型
  • 从kHz到GHz:晶振频率范围如何决定其应用场景
  • 打破渠道壁垒:SEO+ASO协同作战实现用户获取量翻倍
  • Spring Cloud Gateway 服务网关
  • Docker 实战大纲
  • HC32 睡眠
  • SpringBoot整合Liquibase提升数据库变更的可控性、安全性、自动化程度(最详细)
  • Claude Code 基于 VUE + KonvaJS 实现海报生成器(附源码)
  • 基于springboot的候鸟监测管理系统
  • 杂谈:前端开发中的常见问题
  • App拉起:唤醒即达,告别繁琐操作
  • C++实战:数据标准化高效实现
  • 自动化测试学习?
  • 零基础学Triton(1) Triton还需要学习吗?
  • Tailwind CSS 自定义工具类与主题配置指南
  • U盘提示格式化怎么取出里面的文件
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘streamlit’问题
  • OpenTelemetry学习笔记(十二):在APM系统中,属性的命名空间处理遵循规则
  • React框架的Ant Design漫游组件的使用
  • AKS部署.Net Shopping
  • 关于网络模型
  • ElastAlert通过飞书机器人发送报警通知
  • 三、操作系统——第2章:CPU
  • 数学专业转型大数据发展指南
  • Linux网络框架分析