Files
nezhacursormac/client_decrypt.py
2024-12-31 12:56:59 +08:00

74 lines
2.3 KiB
Python

from Crypto.Cipher import AES
import json
import binascii
class ResponseDecryptor:
def __init__(self, encryption_key):
"""
初始化解密器
:param encryption_key: 十六进制格式的密钥字符串
"""
# 将十六进制字符串转换为字节
self.key = binascii.unhexlify(encryption_key)
def decrypt_response(self, encrypted_data):
"""
解密服务器响应的数据
:param encrypted_data: 加密的数据字符串 (格式: "iv:encrypted")
:return: 解密后的 JSON 数据
"""
try:
# 分离 IV 和加密数据
iv_hex, encrypted_text = encrypted_data.split(":")
# 将十六进制转换为字节
iv = binascii.unhexlify(iv_hex)
encrypted_bytes = binascii.unhexlify(encrypted_text)
# 创建解密器
cipher = AES.new(self.key, AES.MODE_CBC, iv)
# 解密数据
decrypted_bytes = cipher.decrypt(encrypted_bytes)
# 移除填充
padding_length = decrypted_bytes[-1]
decrypted_data = decrypted_bytes[:-padding_length]
# 转换为字符串并解析 JSON
decrypted_str = decrypted_data.decode("utf-8")
return json.loads(decrypted_str)
except Exception as e:
raise Exception(f"解密失败: {str(e)}")
# 使用示例
def main():
# 这里填入与服务器相同的加密密钥(十六进制格式)
ENCRYPTION_KEY = "f1e2d3c4b5a6978899aabbccddeeff00112233445566778899aabbccddeeff00" # 替换为实际的密钥
# 创建解密器实例
decryptor = ResponseDecryptor(ENCRYPTION_KEY)
# 模拟服务器响应
server_response = {
"encrypted_data": "iv_hex:encrypted_data_hex" # 这里是服务器返回的加密数据
}
try:
# 解密数据
decrypted_data = decryptor.decrypt_response(server_response["encrypted_data"])
print("解密后的数据:", decrypted_data)
# 现在可以访问解密后的数据
if decrypted_data.get("success"):
print("操作成功!")
# 处理其他数据...
else:
print("操作失败:", decrypted_data.get("message"))
except Exception as e:
print("错误:", str(e))