Python BASE64SHA256 哈希解码与 .NET 示例不同

问题描述 投票:0回答:1

我正在尝试重现创建用于能源交易的唯一交易标识符(UTI)的程序。根据良好实践指南text,UTI 是根据三个步骤生成的:

  1. 将文本转换为字节缓冲区中的哈希值。
  2. 应用sha256函数(sha256函数产生256位的缓冲区,通常每8位对应1个ASCII字符,但如果使用HEXADECIMAL代码,则4位对应一个字符)。
  3. 将结果编码为 BASE64(在 BASE64 中,每 6 位对应一个字符,因此使用 256/6 将产生 42 个字符,其余三个字符用于管理重复)。 (使用的API是.NET框架提供的API。)

提供了一个示例 - 多个输入值连接到一个字符串: C0643778W.EUC06AG978W.EUFWELP2014-11-210.00223EUR1.0000000000MW10YCB-EUROPEU--82015-01-012015-01-31

执行步骤 1-3 后,结果应如下所示:

YwBycOVBTzf2d1nWsAF3CSNz1nbeF4TBNOKz0tHM26wC

在Python中,我尝试用以下方法解决问题:

from base64 import b64encode
from hashlib import sha256

cs = "C0643778W.EUC06AG978W.EUFWELP2014-11-210.00223EUR1.0000000000MW10YCB-EUROPEU--82015-01-012015-01-31"
cs = cs.encode('ascii')
hs = hashlib.sha256()
hs.update(cs)
h64 = base64.b64encode(hs.digest()).decode("ascii")

结果是:

Yw/ycoV/Tzf2d1nWsAF3CSNz1nbeF4TBNOKz0tHM26w=

两个字符串相似,但某些字符有所不同。 我建议在 python 和 .NET 环境中以不同的方式执行 base64 编码字符串的解码。 谢谢您的建议!

python base64 sha256
1个回答
0
投票

上面计算出的base64编码字符串是正确的。然而,ACER 使用的 UTI 计算算法在解码后会替换字符串中的特殊字符。

  • +
    A
  • /
    B
  • =
    C
  • -
    D
© www.soinside.com 2019 - 2024. All rights reserved.