"""斗鱼专用加密模块 - 用户名密码加密""" import base64 import hashlib from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 from Crypto.Cipher import AES from Crypto.Cipher import ARC4 # 斗鱼RSA公钥(从JS中提取) DOUYU_RSA_PUBLIC_KEY = """-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHfGXRkF+RiLA71KAHOFBaWGBy J7M6D3MDAsFHo2JMBDm2Kfj6V3GFMI7B2JQ3qGl0jCk6ILT1jQ+IFhLvLR3cXPaC HT5xYa0hzJpMNO3bLSuJhzY5jQNqRMWfbcV4FLB2JBaFfWcY7RWQ2pCE6jjDnMHM o2kz+dJoGnZM0b99VwIDAQAB -----END PUBLIC KEY-----""" # 斗鱼AES密钥(16位) DOUYU_AES_KEY = "1234567890abcdef" # 斗鱼登录页 cryptoData 使用的 RC4 密钥 DOUYU_RC4_KEY = "7TkbRSEWvVWebXbr" def md5(text: str) -> str: """MD5加密""" return hashlib.md5(text.encode('utf-8')).hexdigest() def rsa_encrypt(text: str, public_key: str = DOUYU_RSA_PUBLIC_KEY) -> str: """RSA加密""" key = RSA.import_key(public_key) cipher = PKCS1_v1_5.new(key) encrypted = cipher.encrypt(text.encode('utf-8')) return base64.b64encode(encrypted).decode('utf-8') def aes_encrypt(text: str, key: str = DOUYU_AES_KEY) -> str: """AES加密""" key_bytes = key.encode('utf-8') text_bytes = text.encode('utf-8') # 填充到16的倍数 padding_len = 16 - (len(text_bytes) % 16) text_bytes += bytes([padding_len] * padding_len) cipher = AES.new(key_bytes, AES.MODE_ECB) encrypted = cipher.encrypt(text_bytes) return base64.b64encode(encrypted).decode('utf-8') def encrypt_username(username: str) -> str: """加密用户名(斗鱼使用RSA加密)""" return rsa_encrypt(username) def encrypt_password(password: str) -> str: """加密密码(斗鱼使用MD5)""" return md5(password) def encrypt_nickname_or_phone(text: str) -> str: """加密昵称或手机号""" key = DOUYU_RC4_KEY.encode('utf-8') cipher = ARC4.new(key) encrypted = cipher.encrypt(text.encode('utf-8')) return base64.b64encode(encrypted).decode('utf-8')