| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- 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))
|