import requests import json import base64 from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad import os # AES CBC 加密函数,返回 Base64 def aes_encrypt(plaintext, key): # 将16进制密钥转换为字节 key_bytes = bytes.fromhex(key) # 生成随机IV iv = os.urandom(16) # 创建加密器 cipher = AES.new(key_bytes, AES.MODE_CBC, iv) # 对明文进行填充并加密 padded_data = pad(plaintext.encode('utf-8'), AES.block_size) encrypted_data = cipher.encrypt(padded_data) # 连接IV和加密后的数据 result = iv + encrypted_data # 转换为Base64编码 return base64.b64encode(result).decode('utf-8') # AES CBC 解密函数,返回解密后的明文 def aes_decrypt(encrypted_text, key): # 将Base64编码的加密数据转换为字节 encrypted_bytes = base64.b64decode(encrypted_text) # 将16进制密钥转换为字节 key_bytes = bytes.fromhex(key) # 从加密数据中提取IV和加密数据 iv = encrypted_bytes[:16] encrypted_data = encrypted_bytes[16:] # 创建解密器 decipher = AES.new(key_bytes, AES.MODE_CBC, iv) # 解密并去除填充 padded_data = decipher.decrypt(encrypted_data) return unpad(padded_data, AES.block_size).decode('utf-8') def CallApi(name,id_card,mobile_no,auth_date): # API相关配置 interface_name = "XXXXXXXX" #接口编号 access_id = "XXXXXXXXXXX" key = "XXXXXXXXXXXXXXXXXXXXX" url = f"https://api.tianyuanapi.com/api/v1/{interface_name}" # 构建请求参数 params = { "mobile_no": mobile_no, "id_card": id_card, "auth_date": auth_date, "name": name, } # 将参数转换为JSON字符串并加密 json_str = json.dumps(params) print(f"请求参数: {json_str}") encrypted_data = aes_encrypt(json_str, key) print(f"加密后的数据: {encrypted_data}") # 发送请求 headers = { "Access-Id": access_id, "Content-Type": "application/json" } payload = { "data": encrypted_data } print(f"发送请求到: {url}") try: response = requests.post(url, json=payload, headers=headers) response_data = response.json() print(f"API响应: {response_data}") # 处理响应 code = response_data.get("code") message = response_data.get("message") encrypted_response_data = response_data.get("data") result = { "code": code, "success": code == 0, "message": message, "encrypted_response": encrypted_response_data } # 如果有返回data,尝试解密 if encrypted_response_data: try: decrypted_data = aes_decrypt(encrypted_response_data, key) result["decrypted_response"] = json.loads(decrypted_data) except Exception as e: print(f"解密响应数据失败: {e}") result["decrypted_response"] = None return result except Exception as e: print(f"请求失败: {e}") return {"success": False, "message": f"请求失败: {e}"} def main(): print("===== 个人涉诉详版 =====") # 直接设置手机号和姓名 name = "XXXXXXXX" id_card = "XXXXXXXXXXXXX" mobile_no = "XXXXXXXXXXXXXXXXXXXX" auth_date = "20250318-20270318" result = CallApi(name,id_card,mobile_no,auth_date) print("\n===== 结果 =====") if result["success"]: print("请求成功!") if result.get("decrypted_response"): print(f"解密后的响应: {json.dumps(result['decrypted_response'], ensure_ascii=False, indent=2)}") else: print("未能获取或解密响应数据") else: print(f"请求失败: {result.get('message', '未知错误')}") if __name__ == "__main__": main()