Files
live-hub-py/core/huya/udb_aes.py
T
yml2213 da2cf5a61d feat(huya): 整合 App 协议登录获取 Cookie 全链路并与 Web 登录解耦
- core/huya: 新增 app_login, wup_encoder, nonce_forge, cert_forge, envelope_forge, device_profile, udb_aes
- core/huya/__init__.py: 导出 login_huya_app_password 与 HuyaAppPasswordLogin
- web/backend: 新增 /accounts/app-password-login 与 /accounts/app-password-login/selected 路由及 Schema,与原 Web 密码登录独立分开
- web/frontend: 增加 App 登录 API 与前端界面“App 登录选中”操作,弹窗结果明确区分
- tests: 新增 test_huya_app_login.py 单元测试覆盖全链路
2026-08-26 15:51:30 +08:00

36 lines
986 B
Python

"""虎牙 Udb AES 加解密工具。
基于 AES-128-ECB 与 0 填充。
"""
from __future__ import annotations
from Crypto.Cipher import AES
MASTER_KEY_STR = b"HuyaUdb1928374650qwertyuiop"
def encrypt_block(key16: bytes, block16: bytes) -> bytes:
return AES.new(key16, AES.MODE_ECB).encrypt(block16)
def decrypt_block(key16: bytes, block16: bytes) -> bytes:
return AES.new(key16, AES.MODE_ECB).decrypt(block16)
def zero_pad(data: bytes) -> bytes:
"""UdbAESUtil::encrypt 填充:补 '\\0' 到 16 的倍数。"""
if len(data) % 16 == 0:
return data
return data + b"\x00" * (16 - len(data) % 16)
def udb_encrypt(key16: bytes, plain: bytes) -> bytes:
"""AES-128-ECB 加密,带零填充。"""
p = zero_pad(plain)
return AES.new(key16, AES.MODE_ECB).encrypt(p)
def udb_decrypt(key16: bytes, ct: bytes) -> bytes:
"""AES-128-ECB 解密,去除尾部零填充。"""
return AES.new(key16, AES.MODE_ECB).decrypt(ct).rstrip(b"\x00")