求助:KeyAuth结合Python校验许可证过期状态失败问题
KeyAuth Python许可证过期校验修复方案
你的代码主要有几个问题导致判断失效:
- 重复调用
keyauthapp.license(key),冗余且可能干扰返回值判断 - 错误将
license方法的返回值当作布尔值判断,实际上它返回的是包含验证详情的字典 - 没有正确提取并判断密钥的过期状态
以下是修正后的完整代码:
import hashlib import sys import time from keyauth import api # 确保正确导入keyauth库 def getchecksum(): md5_hash = hashlib.md5() # 修复哈希校验:读取当前脚本文件而非拼接命令行参数 with open(sys.argv[0], "rb") as file: md5_hash.update(file.read()) digest = md5_hash.hexdigest() return digest keyauthapp = api( name = "MYNAME", ownerid = "MOWNERID", secret = "MYSECRETCODE", version = "1.0", hash_to_check = getchecksum() ) def answer(): key = input('Enter your license: ') # 仅调用一次license验证,获取完整响应 response = keyauthapp.license(key) # 先验证密钥是否有效 if response["success"]: # 检查密钥是否过期:KeyAuth返回的expires字段为"Never"表示永久,否则为Unix时间戳 if response["expires"] == "Never" or float(response["expires"]) > time.time(): print("密钥有效且未过期,执行功能") # 在这里编写你的业务逻辑代码 else: print("密钥已过期,请更换密钥") else: # 打印具体错误信息,方便调试 print(f"密钥验证失败: {response['message']}") # 调用函数测试 answer()
关键修复点说明:
- 哈希校验改为读取当前脚本文件(
sys.argv[0]),避免命令行参数干扰 - 仅调用一次
license方法,获取包含success、expires、message等字段的响应字典 - 分两步判断:先确认密钥验证成功,再检查过期状态(对比Unix时间戳或判断是否为永久密钥)
- 错误分支打印具体错误信息,便于排查问题
内容的提问来源于stack exchange,提问作者Gmoss2112
相关产品推荐
相关产品推荐

