mirror of
https://github.com/Remik1r3n/maimaiDX-Api.git
synced 2025-05-20 04:17:28 +08:00
71 lines
2.2 KiB
Python
71 lines
2.2 KiB
Python
# 解密从 HDD 抓包得到的数据
|
||
# 兼容 PRiSM 和 CN 2024
|
||
|
||
# 完全 Standalone,不依赖于其他文件
|
||
|
||
import base64
|
||
import zlib
|
||
from Crypto.Cipher import AES
|
||
from Crypto.Util.Padding import unpad, pad
|
||
|
||
# CN 2024
|
||
AES_KEY_SDGB_1_40 = "n7bx6:@Fg_:2;5E89Phy7AyIcpxEQ:R@"
|
||
AES_IV_SDGB_1_40 = ";;KjR1C3hgB1ovXa"
|
||
|
||
# 国际服 PRiSM
|
||
AES_KEY_SDGA_1_50 = "A;mv5YUpHBK3YxTy5KB^[;5]C2AL50Bq"
|
||
AES_IV_SDGA_1_50 = "9FM:sd9xA91X14v]"
|
||
|
||
class AESPKCS7:
|
||
# 实现了 maimai 通讯所用的 AES 加密的类
|
||
def __init__(self, key: str, iv: str):
|
||
self.key = key.encode('utf-8')
|
||
self.iv = iv.encode('utf-8')
|
||
self.mode = AES.MODE_CBC
|
||
# 加密
|
||
def encrypt(self, content: str) -> bytes:
|
||
cipher = AES.new(self.key, self.mode, self.iv)
|
||
content_padded = pad(content.encode(), AES.block_size)
|
||
encrypted_bytes = cipher.encrypt(content_padded)
|
||
return encrypted_bytes
|
||
# 解密
|
||
def decrypt(self, encrypted_content: bytes) -> str:
|
||
cipher = AES.new(self.key, self.mode, self.iv)
|
||
decrypted_padded = cipher.decrypt(encrypted_content)
|
||
decrypted = unpad(decrypted_padded, AES.block_size)
|
||
return decrypted
|
||
|
||
def main_sdga():
|
||
# 填入你的想解密的数据的 base64 编码
|
||
base64_encoded_data = "KSGm2qo7qVHz1wrK15PckYC5/kLjKcTtEXOgHeHt1Xn6DPdo3pltoPLADHpe8+Wq"
|
||
|
||
aes = AESPKCS7(AES_KEY_SDGA_1_50, AES_IV_SDGA_1_50)
|
||
|
||
# 首先解码 base64
|
||
decodedData = base64.b64decode(base64_encoded_data)
|
||
# 然后解密数据,PRiSM 是先压缩再加密(which is 正确做法)
|
||
decryptedData = aes.decrypt(decodedData)
|
||
# 解压数据
|
||
decompressedData = zlib.decompress(decryptedData)
|
||
|
||
print(str(decompressedData))
|
||
|
||
def main_sdgb():
|
||
# 填入你的想解密的数据的 base64 编码
|
||
base64_encoded_data = "eJyrTVvpuGwCR32OdodwtVXZ7/Ofmfhin7k/K61q3XNoad1rAPGwECU="
|
||
|
||
aes = AESPKCS7(AES_KEY_SDGB_1_40, AES_IV_SDGB_1_40)
|
||
|
||
# 首先解码 base64
|
||
decodedData = base64.b64decode(base64_encoded_data)
|
||
# 然后解压数据,CN 2024 是加密后再压缩(纯傻逼
|
||
decompressedData = zlib.decompress(decodedData)
|
||
# 最后解密数据
|
||
decryptedData = aes.decrypt(decompressedData)
|
||
|
||
print(str(decryptedData))
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main_sdga()
|