74 lines
2.3 KiB
Python
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))
|