我正在尝试重现创建用于能源交易的唯一交易标识符(UTI)的程序。根据良好实践指南text,UTI 是根据三个步骤生成的:
提供了一个示例 - 多个输入值连接到一个字符串: 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 编码字符串的解码。 谢谢您的建议!
上面计算出的base64编码字符串是正确的。然而,ACER 使用的 UTI 计算算法在解码后会替换字符串中的特殊字符。
+
至 A
/
至 B
=
至 C
-
至 D