本文目录导读:

- 场景一:基于对称加密或哈希的离线授权码(如软件注册码)
- 场景二:校验 JWT(JSON Web Token)类型授权码(如 API Token)
- 场景三:Shell 脚本校验简单的 HMAC 授权码(适合 Unix/Linux 环境)
- 场景四:验证一次性授权码(TOTP/OTP,如 Google Authenticator)
- 安全建议(重要!)
针对“如何用脚本验证授权码”这个问题,需要先明确几个关键点,因为“授权码”在不同场景下含义不同:
- 软件激活码(如 Windows、Adobe 的序列号):通常需要联网或离线校验算法。
- API 授权码 / Token(如 JWT、Bearer Token):通常需要校验签名和过期时间。
- 一次性密码(OTP)/ 验证码:通常需要比对时间戳或哈希值。
以下提供4种最常见场景的脚本验证方法(以 Python 和 Shell 为例,覆盖多数需求)。
基于对称加密或哈希的离线授权码(如软件注册码)
原理:服务端用密钥对用户信息签名,生成授权码;客户端用相同密钥验证签名是否合法。
Python 脚本示例(使用 HMAC-SHA256):
import hmac
import hashlib
import base64
SECRET_KEY = b"your-secret-key-2024" # 与生成端共享的密钥
def verify_license_code(license_code: str, user_info: str = "default_user") -> bool:
"""
验证授权码是否合法
:param license_code: 用户输入的授权码(通常是 Base64 编码的签名)
:param user_info: 被签名的信息(如用户名、机器码)
"""
try:
# 生成正确的签名
expected_sig = hmac.new(
SECRET_KEY,
user_info.encode('utf-8'),
hashlib.sha256
).hexdigest()[:12] # 取前12位作为短码
# 比较
return hmac.compare_digest(license_code, expected_sig)
except Exception:
return False
# 使用示例
user_input = input("请输入授权码: ")
if verify_license_code(user_input):
print("✅ 授权码有效")
else:
print("❌ 授权码无效")
- 扩展:可将
user_info改为机器MAC地址 + 有效期,实现硬件绑定和过期校验。
校验 JWT(JSON Web Token)类型授权码(如 API Token)
原理:JWT 包含 Header、Payload、Signature 三部分,用公钥/密钥验签。
Python 脚本(使用 PyJWT 库):
# 先安装 pip install pyjwt
import jwt
import time
# 你的公钥(或对称密钥)
PUBLIC_KEY = """-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----"""
# 或使用对称密钥: SECRET = "my-symmetric-secret"
def verify_jwt_token(token: str) -> dict or None:
"""验证 JWT 授权码,返回 payload 或 None"""
try:
# 验签 + 自动校验过期时间(exp字段)
payload = jwt.decode(
token,
PUBLIC_KEY, # 对称密钥用 SECRET
algorithms=["RS256", "HS256"], # 根据实际算法选择
options={"verify_exp": True}
)
return payload
except jwt.ExpiredSignatureError:
print("❌ Token已过期")
except jwt.InvalidTokenError as e:
print(f"❌ 无效Token: {e}")
return None
# 使用
token = "eyJhbGciOiJSUzI1NiIs..."
payload = verify_jwt_token(token)
if payload:
print(f"✅ 授权有效,用户ID: {payload.get('sub')}")
Shell 脚本校验简单的 HMAC 授权码(适合 Unix/Linux 环境)
原理:利用系统内置的 openssl 计算 HMAC,适合无 Python 环境。
#!/bin/bash
SECRET="your_secret_key"
MACHINE_ID=$(hostname) # 或 cat /sys/class/net/eth0/address
# 用户输入的授权码
read -p "请输入授权码: " USER_CODE
# 计算正确的授权码(取前8位)
EXPECTED_CODE=$(echo -n "$MACHINE_ID" | openssl dgst -sha256 -hmac "$SECRET" | cut -d' ' -f2 | cut -c1-8)
if [ "$USER_CODE" = "$EXPECTED_CODE" ]; then
echo "✅ 授权码有效"
else
echo "❌ 授权码无效"
exit 1
fi
- 注意:此方法极度简化,仅供演示,生产环境需用
openssl的-binary和base64编码。
验证一次性授权码(TOTP/OTP,如 Google Authenticator)
原理:基于时间戳和共享密钥,生成 6 位数字,每 30 秒变化一次。
Python 脚本(使用 pyotp 库):
pip install pyotp
import pyotp
# 服务端和客户端共有的密钥(通常以 Base32 存储)
SECRET = "JBSWY3DPEHPK3PXP" # 示例密钥
def verify_otp(otp_code: str) -> bool:
"""验证 6 位一次性授权码"""
totp = pyotp.TOTP(SECRET)
# 默认允许前后一个时间片(30秒)的偏差
return totp.verify(otp_code, valid_window=1)
# 使用
user_input = input("请输入验证码: ")
if verify_otp(user_input):
print("✅ 一次性授权码有效")
else:
print("❌ 无效或已过期")
安全建议(重要!)
- 密钥保密原则:客户端验签的密钥应硬编码或混淆后存储(如用
base64编码后分片存储,再运行时拼接),或使用非对称密钥(客户端只存公钥)。 - 防止重放攻击:若为网络场景,应在授权码中加入时间戳或 nonce(一次性随机数),服务端记录已使用过的 nonce。
- 不要仅依赖客户端验证:关键权限(如支付、管理后台)必须在服务端再次验证授权码,客户端脚本主要用于“本地解锁功能”或减少服务端压力。
- 日志安全:验证失败时不要打印完整授权码,只打印前 4 位或哈希值。
| 场景 | 推荐方法 | 核心脚本 |
|---|---|---|
| 离线软件授权码 | HMAC-SHA256 签名 | Python hmac 模块 |
| API/Web Token | JWT 验签 | PyJWT 库 |
| 服务器环境验证 | Shell + openssl |
Shell 脚本 |
| 一次性验证码 | TOTP 算法 | pyotp 库 |
你可以根据授权码的生成方和需要验证的环境,从以上 4 种方法中选择最适合的一个,如果需要针对特定场景(如 Adobe 激活、特定游戏平台)的验证,请补充授权码的格式样例和生成逻辑,我可以提供更精准的脚本。