49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
解密飞书 UAT(用户访问令牌)
|
||
"""
|
||
import os
|
||
import json
|
||
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
|
||
|
||
# 路径
|
||
LINUX_UAT_DIR = os.path.expanduser("~/.local/share/openclaw-feishu-uat")
|
||
MASTER_KEY_PATH = os.path.join(LINUX_UAT_DIR, "master.key")
|
||
ENCRYPTED_FILE = os.path.join(LINUX_UAT_DIR, "cli_a93815b250b9dcb5_ou_86def554b50f91972e2924a605ccf634.enc")
|
||
|
||
# 常量
|
||
IV_BYTES = 12
|
||
TAG_BYTES = 16
|
||
|
||
def decrypt_uat():
|
||
# 读取 master key
|
||
with open(MASTER_KEY_PATH, "rb") as f:
|
||
key = f.read()
|
||
|
||
# 读取加密文件
|
||
with open(ENCRYPTED_FILE, "rb") as f:
|
||
data = f.read()
|
||
|
||
# 解析加密数据:[12-byte IV][16-byte tag][ciphertext]
|
||
iv = data[:IV_BYTES]
|
||
tag = data[IV_BYTES:IV_BYTES + TAG_BYTES]
|
||
ciphertext = data[IV_BYTES + TAG_BYTES:]
|
||
|
||
# 解密
|
||
aesgcm = AESGCM(key)
|
||
plaintext = aesgcm.decrypt(iv, ciphertext + tag, None)
|
||
|
||
# 解析 JSON
|
||
token_data = json.loads(plaintext.decode('utf-8'))
|
||
return token_data
|
||
|
||
if __name__ == "__main__":
|
||
token_data = decrypt_uat()
|
||
print("解密成功!")
|
||
print(f"用户 OpenID: {token_data.get('user_open_id')}")
|
||
print(f"访问令牌: {token_data.get('access_token', '')[:20]}...")
|
||
print(f"刷新令牌: {token_data.get('refresh_token', '')[:20]}...")
|
||
print(f"过期时间: {token_data.get('expires_at')}")
|
||
print(f"\n完整数据:")
|
||
print(json.dumps(token_data, indent=2))
|