node.js 6.0.0 缓冲区到 python3 中的等效字符串

node.js 6.0.0 buffer to string equivalent in python3

我正在将旧的 node.js 库转换为 python,但无法在 python.

中重现 Buffer.toString() 的行为

this lib 用于 node 6.0.0 环境

我确实看过 this node issue,但我不明白它是否与我的问题有关。

js函数:

const KDF_PARTY_V = Buffer.from('E6F8C08930597B47472620568D207A23E4FCEF4B3F0AA3DC26FF369C622C6E1D', 'hex').toString('binary') 
// The SHA-256 hash of your ID string literal; 32 bytes in size.
console.log(KDF_PARTY_V)

输出:

æøÀ0Y{GG& V z#äüïK?
£Ü&ÿ6b,n

python相当于:

kdf_v = memoryview(bytes.fromhex('E6F8C08930597B47472620568D207A23E4FCEF4B3F0AA3DC26FF369C622C6E1D')).tobytes().decode('latin-1')
print(kdf_v)

输出(堆栈显示不正确)

æøÀ‰0Y{GG& V z#äüïK?
£Ü&ÿ6œb,n

我的实际控制台消息: 也许我应该使用不同于 latin-1 和 utf-8 的东西?

根本就不要尝试decode。解码将字节串转换为文本字符串,而哈希不是文本字符串。

kdf_v = bytes.fromhex('E6F8C08930597B47472620568D207A23E4FCEF4B3F0AA3DC26FF369C622C6E1D')

给你一个 32 字节的 bytes 对象,它在功能上等同于 Node.js Buffer.

这只是控制台字符编码错误

查看二进制数据本身时,python 版本与 js 版本相同,因此:

kdf_v = bytes.fromhex(merchant_id).decode('latin1')

完美运行

@AKX 我确实需要 str 格式的变量,因为我在串联中使用它并且它的结果在 sha256 摘要中