client_decrypt.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. from Crypto.Cipher import AES
  2. import json
  3. import binascii
  4. class ResponseDecryptor:
  5. def __init__(self, encryption_key):
  6. """
  7. 初始化解密器
  8. :param encryption_key: 十六进制格式的密钥字符串
  9. """
  10. # 将十六进制字符串转换为字节
  11. self.key = binascii.unhexlify(encryption_key)
  12. def decrypt_response(self, encrypted_data):
  13. """
  14. 解密服务器响应的数据
  15. :param encrypted_data: 加密的数据字符串 (格式: "iv:encrypted")
  16. :return: 解密后的 JSON 数据
  17. """
  18. try:
  19. # 分离 IV 和加密数据
  20. iv_hex, encrypted_text = encrypted_data.split(":")
  21. # 将十六进制转换为字节
  22. iv = binascii.unhexlify(iv_hex)
  23. encrypted_bytes = binascii.unhexlify(encrypted_text)
  24. # 创建解密器
  25. cipher = AES.new(self.key, AES.MODE_CBC, iv)
  26. # 解密数据
  27. decrypted_bytes = cipher.decrypt(encrypted_bytes)
  28. # 移除填充
  29. padding_length = decrypted_bytes[-1]
  30. decrypted_data = decrypted_bytes[:-padding_length]
  31. # 转换为字符串并解析 JSON
  32. decrypted_str = decrypted_data.decode("utf-8")
  33. return json.loads(decrypted_str)
  34. except Exception as e:
  35. raise Exception(f"解密失败: {str(e)}")
  36. # 使用示例
  37. def main():
  38. # 这里填入与服务器相同的加密密钥(十六进制格式)
  39. ENCRYPTION_KEY = "f1e2d3c4b5a6978899aabbccddeeff00112233445566778899aabbccddeeff00" # 替换为实际的密钥
  40. # 创建解密器实例
  41. decryptor = ResponseDecryptor(ENCRYPTION_KEY)
  42. # 模拟服务器响应
  43. server_response = {
  44. "encrypted_data": "iv_hex:encrypted_data_hex" # 这里是服务器返回的加密数据
  45. }
  46. try:
  47. # 解密数据
  48. decrypted_data = decryptor.decrypt_response(server_response["encrypted_data"])
  49. print("解密后的数据:", decrypted_data)
  50. # 现在可以访问解密后的数据
  51. if decrypted_data.get("success"):
  52. print("操作成功!")
  53. # 处理其他数据...
  54. else:
  55. print("操作失败:", decrypted_data.get("message"))
  56. except Exception as e:
  57. print("错误:", str(e))