如何用脚本验证授权码?

wen 实用脚本 2

本文目录导读:

如何用脚本验证授权码?

  1. 场景一:基于对称加密或哈希的离线授权码(如软件注册码)
  2. 场景二:校验 JWT(JSON Web Token)类型授权码(如 API Token)
  3. 场景三:Shell 脚本校验简单的 HMAC 授权码(适合 Unix/Linux 环境)
  4. 场景四:验证一次性授权码(TOTP/OTP,如 Google Authenticator)
  5. 安全建议(重要!)

针对“如何用脚本验证授权码”这个问题,需要先明确几个关键点,因为“授权码”在不同场景下含义不同:

  1. 软件激活码(如 Windows、Adobe 的序列号):通常需要联网或离线校验算法。
  2. API 授权码 / Token(如 JWT、Bearer Token):通常需要校验签名和过期时间。
  3. 一次性密码(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-binarybase64 编码。

验证一次性授权码(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("❌ 无效或已过期")

安全建议(重要!)

  1. 密钥保密原则:客户端验签的密钥应硬编码或混淆后存储(如用 base64 编码后分片存储,再运行时拼接),或使用非对称密钥(客户端只存公钥)。
  2. 防止重放攻击:若为网络场景,应在授权码中加入时间戳或 nonce(一次性随机数),服务端记录已使用过的 nonce。
  3. 不要仅依赖客户端验证:关键权限(如支付、管理后台)必须在服务端再次验证授权码,客户端脚本主要用于“本地解锁功能”或减少服务端压力。
  4. 日志安全:验证失败时不要打印完整授权码,只打印前 4 位或哈希值。
场景 推荐方法 核心脚本
离线软件授权码 HMAC-SHA256 签名 Python hmac 模块
API/Web Token JWT 验签 PyJWT
服务器环境验证 Shell + openssl Shell 脚本
一次性验证码 TOTP 算法 pyotp

你可以根据授权码的生成方需要验证的环境,从以上 4 种方法中选择最适合的一个,如果需要针对特定场景(如 Adobe 激活、特定游戏平台)的验证,请补充授权码的格式样例生成逻辑,我可以提供更精准的脚本。

抱歉,评论功能暂时关闭!