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

JS转Python的MD5哈希+Base64编码结果不一致问题及解决

Python与JS的MD5+Base64结果不一致的原因及修复方法

问题背景

原JavaScript代码:

var requestContent = CryptoJS.MD5('{ "agentSessionId": "1622024176" }');
var requestContentBase64String = requestContent.toString(CryptoJS.enc.Base64);

执行后返回结果:bwtSmXFDxoG4cb0HDrZbhQ==

自行编写的Python代码(注:原代码存在语法错误,已修正语法但保留原逻辑):

import hashlib
import base64

request_content = hashlib.md5('{ "agentSessionId": "1622024176" }'.encode('utf-8')).hexdigest()
request_content_base64_string = base64.b64encode(request_content.encode())

执行后返回结果:NmYwYjUyOTk3MTQzYzY4MWI4NzFiZDA3MGViNjViODU=,与JS结果不符。

原因分析

  • CryptoJS的MD5()方法返回的是原始二进制哈希值,调用toString(CryptoJS.enc.Base64)是直接对二进制哈希值做Base64编码。
  • 你的Python代码中,hexdigest()会把MD5的二进制结果转换成十六进制字符串(将二进制字节转为对应的16进制字符),之后再对这个字符串做Base64编码,相当于多了一层字符串转换,最终结果自然和JS不一致。

修复后的Python代码

直接获取MD5的原始二进制摘要(用digest()代替hexdigest()),再对二进制数据做Base64编码:

import hashlib
import base64

# 1. 将输入字符串转为UTF-8字节流(与JS默认编码对齐)
raw_data = '{ "agentSessionId": "1622024176" }'.encode('utf-8')
# 2. 计算MD5的原始二进制摘要
md5_digest = hashlib.md5(raw_data).digest()
# 3. 对二进制摘要做Base64编码,再转成可读字符串
request_content_base64_string = base64.b64encode(md5_digest).decode('utf-8')

print(request_content_base64_string)  # 输出:bwtSmXFDxoG4cb0HDrZbhQ==

验证说明

修复后的代码逻辑与JS完全对齐:先将字符串转UTF-8字节流,再计算MD5原始二进制哈希值,最后直接对二进制哈希值做Base64编码,最终得到与JS一致的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:20:25