From 3ab5f15b0ecd08f6c38642f5d864d2abb31394bf Mon Sep 17 00:00:00 2001 From: wsy182 <2392948297@qq.com> Date: Tue, 21 Oct 2025 13:28:35 +0800 Subject: [PATCH] =?UTF-8?q?feat(login):=20=E5=AE=9E=E7=8E=B0DES=E5=8A=A0?= =?UTF-8?q?=E5=AF=86=E7=99=BB=E5=BD=95=E5=8A=9F=E8=83=BD-=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20DES/CBC/PKCS7=20=E5=8A=A0=E5=AF=86=E5=87=BD?= =?UTF-8?q?=E6=95=B0=EF=BC=8C=E5=85=BC=E5=AE=B9=20CryptoJS.DES.encrypt=20-?= =?UTF-8?q?=20=E4=BD=BF=E7=94=A8=E9=BB=98=E8=AE=A4=E5=AF=86=E9=92=A5?= =?UTF-8?q?=E5=92=8C=20IV=20=E5=AF=B9=E7=99=BB=E5=BD=95=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E5=8A=A0=E5=AF=86=20-=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=20payload=20=E7=BB=93=E6=9E=84=EF=BC=8C?= =?UTF-8?q?=E5=B0=86=E5=8A=A0=E5=AF=86=E5=90=8E=E7=9A=84=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E4=B8=B2=E4=BD=9C=E4=B8=BA=20data=20=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E5=80=BC=20-=20=E6=9B=B4=E6=96=B0=E6=8E=A5=E5=8F=A3=E5=9C=B0?= =?UTF-8?q?=E5=9D=80=E5=B9=B6=E8=B0=83=E6=95=B4=E8=AF=B7=E6=B1=82=E9=80=BB?= =?UTF-8?q?=E8=BE=91=20-=20=E5=A2=9E=E5=BC=BA=E9=94=99=E8=AF=AF=E5=A4=84?= =?UTF-8?q?=E7=90=86=E4=B8=8E=E8=B0=83=E8=AF=95=E4=BF=A1=E6=81=AF=E6=89=93?= =?UTF-8?q?=E5=8D=B0-=20=E4=BC=98=E5=8C=96=E5=93=8D=E5=BA=94=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E6=96=B9=E5=BC=8F=EF=BC=8C=E6=AD=A3=E7=A1=AE=E6=8F=90?= =?UTF-8?q?=E5=8F=96=20token=20=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trian_system_login_and_get_token.py | 70 ++++++++++++++++++++++------- 1 file changed, 54 insertions(+), 16 deletions(-) diff --git a/trian_system_login_and_get_token.py b/trian_system_login_and_get_token.py index 435940d..5c9bd16 100644 --- a/trian_system_login_and_get_token.py +++ b/trian_system_login_and_get_token.py @@ -1,17 +1,49 @@ import requests import json +from Crypto.Cipher import DES +from Crypto.Util.Padding import pad +import base64 -# 接口地址 -url = "http://127.0.0.1:8084/c/v1/wellMudLogAndWireLine/system/privateManager/userLoginAggregate/other/login" +# === 配置你的密钥和 IV(必须是 8 字节!)=== +DEFAULT_KEY = "12345678" # 替换为实际 key,必须 8 字符 +DEFAULT_IV = "abcdefgh" # 替换为实际 iv,必须 8 字符 -# 请求体 +def get_des_encrypt(data: str, _key: str = DEFAULT_KEY, _iv: str = DEFAULT_IV) -> str: + """ + 使用 DES/CBC/PKCS7 加密字符串,与 CryptoJS.DES.encrypt 兼容。 + """ + key = _key.encode('utf-8') + iv = _iv.encode('utf-8') + + if len(key) != 8: + raise ValueError("DES key must be exactly 8 bytes long") + if len(iv) != 8: + raise ValueError("DES IV must be exactly 8 bytes long") + + plaintext = data.encode('utf-8') + padded_data = pad(plaintext, DES.block_size) + cipher = DES.new(key, DES.MODE_CBC, iv) + encrypted_bytes = cipher.encrypt(padded_data) + return base64.b64encode(encrypted_bytes).decode('utf-8') + + +# === 构造原始登录数据 === +login_data = { + "userId": "admin", + "password": "123456" +} + +# 转为 JSON 字符串(注意:不要加空格,确保与前端一致) +data_str = json.dumps(login_data, separators=(',', ':')) # 紧凑格式,无空格 + +# 加密 +encrypted_data = get_des_encrypt(data_str, DEFAULT_KEY, DEFAULT_IV) + +# === 构造最终请求 payload === payload = { "encType": 0, "x_flag": "", - "data": { - "userId": "admin", - "password": "123456" - } + "data": encrypted_data # 注意:这里现在是加密后的字符串,不是 dict! } # 请求头 @@ -19,25 +51,31 @@ headers = { "Content-Type": "application/json" } +# 接口地址 +url = "http://127.0.0.1:8084/c/v1/wellMudLogAndWireLine/system/privateManager/userLoginAggregate/other/login" + try: # 发送 POST 请求 response = requests.post(url, headers=headers, data=json.dumps(payload)) - # 检查状态码 - response.raise_for_status() + # 打印调试信息(可选) + print("Status Code:", response.status_code) + print("Response Text:", response.text) - # 转为 JSON + # 解析响应 result = response.json() - # 从响应中解析 token + # 正确获取 token(你原来的写法 result.post(...) 是错误的) token = result.get("data", {}).get("token") if token: - print("登录成功,Token:", token) + print("✅ 登录成功,Token:", token) else: - print("未获取到 Token,响应内容:", result) + print("❌ 未获取到 Token,响应内容:", result) except requests.RequestException as e: - print("请求异常:", e) -except ValueError: - print("响应不是合法的 JSON 格式") \ No newline at end of file + print("🌐 请求异常:", e) +except json.JSONDecodeError: + print("🧩 响应不是合法的 JSON 格式") +except ValueError as ve: + print("⚠️ 加密参数错误:", ve) \ No newline at end of file