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

Python与.NET生成UTI的BASE64SHA256哈希结果不一致问题

问题解决:Python与.NET生成REMIT UTI的差异修复

核心差异原因

你的结果不一致来自两个关键逻辑差异:

  1. 字符串编码方式不同:Python代码使用ASCII编码转换字符串为字节缓冲区,但.NET端大概率采用了**UTF-16LE(对应.NET的Encoding.Unicode)**编码,这直接导致哈希前的字节数据完全不同。
  2. Base64编码变体差异:Python默认使用标准Base64(包含+、/和末尾填充=),而.NET端使用了URL安全的Base64(Base64Url),会将+替换为-、/替换为_,并移除末尾的填充字符=。

修复后的Python代码

from base64 import urlsafe_b64encode
from hashlib import sha256

# 原始输入字符串
cs = "C0643778W.EUC06AG978W.EUFWELP2014-11-210.00223EUR1.0000000000MW10YCB-EUROPEU--82015-01-012015-01-31"
# 匹配.NET的UTF-16LE编码(即Encoding.Unicode)
cs_bytes = cs.encode('utf-16-le')
# 计算SHA256哈希
hs = sha256()
hs.update(cs_bytes)
# 生成URL安全Base64并移除末尾填充
h64 = urlsafe_b64encode(hs.digest()).decode("ascii").rstrip('=')
print(h64)

关键逻辑说明

  • 编码匹配:.NET的Encoding.Unicode.GetBytes()本质是UTF-16小端序编码,对应Python的encode('utf-16-le')。
  • Base64处理:Python的urlsafe_b64encode自动完成+→-、/→_的替换,再通过rstrip('=')移除填充字符,完全对齐.NET的Base64Url处理逻辑。

运行上述代码后,生成的结果将与.NET输出的YwBycOVBTzf2d1nWsAF3CSNz1nbeF4TBNOKz0tHM26wC完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:33:19