You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将JS登录加密逻辑转Python后编码解码均出错,请求排查

问题:将JS登录加密逻辑转为Python实现失败,编码解码异常

问题描述

尝试把服务器API中的JavaScript登录加密逻辑转换为Python实现,但生成的加密结果与服务器返回值不符,同时解码服务器返回的pwh值时出现编码错误。

服务器JS加密逻辑片段

var k = c + b.salt;
j.mode = 2,
j.userId = g.user.userId,
j.pwh = CryptoJS.SHA1(k),
j.pwh = j.pwh.toString(CryptoJS.enc.Base64),
a({

我的Python实现代码

>>> import hashlib
>>> import base64
>>> 
>>> salt = "HPUETYr0njRoc9A5QVttWNU/OPY="
>>> c = "V6T5BXH2"
>>> pands = c+salt
>>> pands_enc = hashlib.sha1(pands.encode())
>>> pands_enc= pands_enc.hexdigest()
>>> pwh = base64.b64encode(pands_enc.encode())
>>> print(pwh)
b'ZDQ0ZWMzZGY4MmNmNjkzNjJhYmM5YzEwYmE1YzA5OGY2NTNiMzMzOQ=='

异常情况

  1. 服务器返回的对应salt的pwh值为:"pwh": "1E7D34LPaTYqvJwQulwJj2U7Mzk=",与Python生成结果完全不同。
  2. 解码服务器返回的pwh时出现错误:
>>> base64_message = '1E7D34LPaTYqvJwQulwJj2U7Mzk='
>>> base64_bytes = base64_message.encode('ascii')
>>> message_bytes = base64.b64decode(base64_bytes)
>>> message = message_bytes.decode('ascii')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd4 in position 0: ordinal not in range(128)

问题排查与解决方案

1. 加密逻辑错误根源

你在Python中犯了一个关键错误:

  • JS中CryptoJS.SHA1(k)生成的是原始二进制哈希值,之后直接用toString(CryptoJS.enc.Base64)把二进制哈希转为Base64字符串。
  • 但你的Python代码中,先把SHA1哈希转为了十六进制字符串(hexdigest()),再对这个字符串做Base64编码,这完全改变了处理流程,导致结果不符。

2. 修正后的Python加密代码

直接对SHA1的原始二进制结果(digest()方法获取)做Base64编码:

import hashlib
import base64

salt = "HPUETYr0njRoc9A5QVttWNU/OPY="
c = "V6T5BXH2"  # 注意:如果实际c值不同,需要替换为正确值
pands = c + salt
# 获取SHA1的原始二进制哈希,再做Base64编码
pwh_bytes = hashlib.sha1(pands.encode('utf-8')).digest()
pwh = base64.b64encode(pwh_bytes).decode('utf-8')
print(pwh)

3. 解码错误的解决

服务器返回的pwh是SHA1二进制哈希的Base64编码,哈希的二进制结果不是可打印的ASCII字符串,所以不能用ascii解码。如果需要查看哈希的可读形式,应该转为十六进制字符串:

base64_message = '1E7D34LPaTYqvJwQulwJj2U7Mzk='
base64_bytes = base64_message.encode('ascii')
message_bytes = base64.b64decode(base64_bytes)
# 转为十六进制字符串查看
hex_hash = message_bytes.hex()
print(hex_hash)

内容的提问来源于stack exchange,提问作者jspv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 23:30:52