Skip to main content

Advanced JWT tools with RSA key recovery and web interface

Project description

AJWT - Advanced JWT Tools

高级 JWT 工具集,支持 RSA 密钥恢复攻击和 Web 图形界面。

功能特性

🔐 JWT 分析工具 (ajwt)

  • JWT Token 解析和分析
  • Header 和 Payload 解码
  • 签名信息查看
  • 时间戳验证和过期检查
  • 支持多种签名算法识别

🔓 RSA 密钥恢复工具 (ajwt_rsa)

  • 从多个 JWT Token 恢复 RSA 公钥
  • 支持 RS256/RS384/RS512/PS256/PS384/PS512 算法
  • 并行处理提高效率
  • 自动验证恢复的密钥

🌐 Web 图形界面 (ajwt_web)

  • 密钥管理
    • 生成 RSA 密钥对 (2048/3072/4096 位)
    • 上传现有私钥
    • 自动提取公钥
  • JWT 生成
    • 支持多种签名算法
    • 自定义 Header 和 Payload
    • 一键生成和复制
  • JWT 验证
    • Token 解析
    • 签名验证
    • 时间戳解析
    • 过期检查

安装

使用 uv (推荐)

# 克隆仓库
git clone https://github.com/yourusername/ajwt.git
cd ajwt

# 同步依赖
uv sync

# 或直接安装
uv pip install .

使用 pip

pip install ajwt

快速开始

1. JWT 分析工具

# 交互模式
uv run ajwt

# 分析指定 Token
uv run ajwt --token "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."

输出示例:

================================================================================
JWT TOKEN ANALYSIS
================================================================================

📋 HEADER:
----------------------------------------
{
  "alg": "RS256",
  "typ": "JWT"
}

🔐 Algorithm: RS256
🔑 RSA-based signature (asymmetric key)

📦 PAYLOAD:
----------------------------------------
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

📝 STANDARD CLAIMS:
----------------------------------------
  Subject: 1234567890
  Issued At: 2018-01-18 01:30:22 UTC (1516239022)

🔏 SIGNATURE:
----------------------------------------
  Length: 256 bytes (2048 bits)

2. RSA 密钥恢复工具

uv run ajwt_rsa

使用流程:

  1. 输入至少 2 个使用相同 RSA 密钥签名的 JWT Token
  2. 工具自动计算并恢复 RSA 公钥
  3. 验证恢复的密钥是否有效

输出示例:

==================================================
ATTACK SUCCESSFUL!
==================================================
RSA Modulus (n):
25195908475657893494027183240048398571429282126204032027777137836043662020707595556264018525880784406918290641249515082189298559149176184502808489120072844992687392807287776735971418347270261896375014971824691165077613379859095700097330459748808428401797429100642458691817195118746121515172654632282216869987481896995098600

Public Key (PEM):
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8kGa1pSjbSYZVebtTRBLxBz5H
...
-----END PUBLIC KEY-----
==================================================

3. Web 图形界面

# 使用默认配置 (127.0.0.1:8000)
uv run ajwt_web

# 指定主机和端口
uv run ajwt_web --host 0.0.0.0 --port 8080

# 开发模式 (启用自动重载)
uv run ajwt_web --reload

然后在浏览器中访问 http://127.0.0.1:8000

Web 界面功能

密钥管理:

  1. 选择"生成密钥对"或"上传私钥"
  2. 生成/上传后,公钥会自动填充到验证区域

生成 JWT:

  1. 确保已加载私钥
  2. 选择签名算法
  3. 编辑 Header 和 Payload (JSON 格式)
  4. 点击"生成 JWT"
  5. 复制生成的 Token

验证 JWT:

  1. 粘贴 JWT Token
  2. 公钥会自动填充(如果已加载私钥)
  3. 点击"验证 JWT"
  4. 查看解析结果和签名验证状态

API 接口

Web 应用提供以下 REST API:

POST /api/generate-keypair

生成 RSA 密钥对

// 请求
{
  "key_size": 2048
}

// 响应
{
  "private_key": "-----BEGIN RSA PRIVATE KEY-----\n...",
  "public_key": "-----BEGIN PUBLIC KEY-----\n...",
  "key_size": 2048
}

POST /api/extract-public-key

从私钥提取公钥

// 请求
{
  "private_key": "-----BEGIN RSA PRIVATE KEY-----\n..."
}

// 响应
{
  "public_key": "-----BEGIN PUBLIC KEY-----\n..."
}

POST /api/generate-jwt

生成 JWT Token

// 请求
{
  "header": {"alg": "RS256", "typ": "JWT"},
  "payload": {"sub": "1234567890", "name": "John Doe"},
  "private_key": "-----BEGIN RSA PRIVATE KEY-----\n...",
  "algorithm": "RS256"
}

// 响应
{
  "token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
}

POST /api/validate-jwt

验证和解析 JWT Token

// 请求
{
  "token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
  "public_key": "-----BEGIN PUBLIC KEY-----\n..."  // 可选
}

// 响应
{
  "valid": true,
  "header": {"alg": "RS256", "typ": "JWT"},
  "payload": {"sub": "1234567890", "name": "John Doe"},
  "signature_valid": true,
  "decoded_info": {
    "expiration": {
      "timestamp": 1735300000,
      "datetime": "2024-12-27T12:00:00+00:00",
      "expired": false
    }
  }
}

支持的算法

  • RS256: RSASSA-PKCS1-v1_5 with SHA-256
  • RS384: RSASSA-PKCS1-v1_5 with SHA-384
  • RS512: RSASSA-PKCS1-v1_5 with SHA-512
  • PS256: RSASSA-PSS with SHA-256
  • PS384: RSASSA-PSS with SHA-384
  • PS512: RSASSA-PSS with SHA-512

依赖项

  • Python >= 3.8
  • crypto-plus >= 1.0.6
  • gmpy2 >= 2.2.1
  • fastapi >= 0.104.0 (Web 界面)
  • uvicorn >= 0.24.0 (Web 界面)
  • pydantic >= 2.0.0 (Web 界面)

开发

# 克隆仓库
git clone https://github.com/yourusername/ajwt.git
cd ajwt

# 安装开发依赖
uv sync

# 运行测试
uv run python test_jwt_tools.py

# 启动 Web 应用 (开发模式)
uv run ajwt_web --reload

安全注意事项

  1. 密钥安全:

    • 私钥应妥善保管,不要泄露
    • Web 界面的密钥仅在浏览器会话中保存
    • 生产环境建议使用 HTTPS
  2. 密钥长度:

    • 推荐使用至少 2048 位的 RSA 密钥
    • 更高安全性场景使用 4096 位
  3. Token 过期:

    • 生成 JWT 时设置合理的过期时间 (exp 字段)
    • 定期轮换密钥
  4. RSA 密钥恢复:

    • 此工具用于安全研究和测试
    • 不要用于非法用途

故障排除

端口被占用

uv run ajwt_web --port 8080

依赖安装失败

uv sync --reinstall

签名验证失败

  • 确保公钥与私钥匹配
  • 检查算法是否一致
  • 确认 Token 未被修改

示例

JWT Payload 示例

{
  "sub": "1234567890",
  "name": "John Doe",
  "email": "john@example.com",
  "iat": 1516239022,
  "exp": 1735300000,
  "nbf": 1516239022,
  "roles": ["admin", "user"],
  "permissions": ["read", "write"]
}

使用 Python API

from ajwt.jwt_parser import JWTParser
from ajwt.jwt_tool import JWTAnalyzer

# 解析 JWT
token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
components = JWTParser.parse(token)

print(components.header)
print(components.payload)
print(components.signature.hex())

# 分析 JWT
analyzer = JWTAnalyzer()
analyzer.analyze_token(token)

更新日志

v0.3.1 (2024-12-03)

  • ✨ JWT验证时显示RSA密钥模的bit数
  • 🔑 在验证响应中添加密钥信息(模数长度)
  • 🎨 优化Web界面验证结果显示

v0.3.0 (2024-11-27)

  • ✨ 新增 Web 图形界面
  • ✨ 支持密钥对生成和管理
  • ✨ 支持 JWT 生成和验证
  • ✨ 自动提取公钥功能
  • 🎨 优化界面布局为单列流式设计
  • 📝 更新文档

v0.2.2

  • 🐛 修复 JWT 解析问题
  • ⚡ 优化性能

v0.2.0

  • ✨ 添加 RSA 密钥恢复工具
  • ✨ 支持多种 RSA 签名算法
  • ⚡ 并行处理提高效率

v0.1.0

  • 🎉 初始版本
  • ✨ JWT 解析和分析功能

许可证

MIT License

贡献

欢迎提交 Issue 和 Pull Request!

作者

wmymz - wmymz@icloud.com

致谢

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ajwt-0.3.1.tar.gz (17.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ajwt-0.3.1-py3-none-any.whl (20.4 kB view details)

Uploaded Python 3

File details

Details for the file ajwt-0.3.1.tar.gz.

File metadata

  • Download URL: ajwt-0.3.1.tar.gz
  • Upload date:
  • Size: 17.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.0

File hashes

Hashes for ajwt-0.3.1.tar.gz
Algorithm Hash digest
SHA256 93511e803f3b3ce95c39a99e4c84ef1f4f91b094e7b4ffd7a86eab6ab1d57367
MD5 51870e8c766b71cb42859f64f89f81fb
BLAKE2b-256 efc21fee74fbd806c36aec585fbdc594c4edb335c7c7894130232245719c9a2f

See more details on using hashes here.

File details

Details for the file ajwt-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: ajwt-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 20.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.0

File hashes

Hashes for ajwt-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d0f63f4f8dcd491fb80c067314983f8bd12246caf8730c2597e6cced241eb474
MD5 23736f4339f911ab0e00394248cecde1
BLAKE2b-256 fd97f6af8263cfb41b2479eb690558794e2b9fa45088d4e203748cb50bc5154a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page