sha256(python中的新缓冲区(字符串,' hex'))

时间:2017-10-22 19:56:38

标签: python node.js

目前我的代码是用nodejs编写的。

const sha256 = require('js-sha256').sha256;
var stringl = "8d12a197cb00d4747a1fe03395095ce2a5cc68198f3470a7388c05ee4e7af3d01d8c722b0ff5237400000000000000000000000000000000000000000000000000000000000000b40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003600000000000000000000000000000000000000000000000000000000004c4b40000000000000000000000000000000000000000000000000000000000001e240"
console.log(sha256(new Buffer(stringl, 'hex')));

它返回

2c0a99a5727be633e440dd8ce2090a0ab7d5a84ccafc9385ea9812db4d715df1

我想将代码从nodejs转换为python(3.5)。

我以为我可以用这段代码来做。

import hashlib
string21 = "8d12a197cb00d4747a1fe03395095ce2a5cc68198f3470a7388c05ee4e7af3d01d8c722b0ff5237400000000000000000000000000000000000000000000000000000000000000b40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003600000000000000000000000000000000000000000000000000000000004c4b40000000000000000000000000000000000000000000000000000000000001e240"
print(hashlib.sha256(str(int(string21,16)).encode('utf-8')).hexdigest())

但返回

346c61765546d4ff12fdbea997f40bdb5216b8df2b5402a6b45893df723132f6

任何想法?

1 个答案:

答案 0 :(得分:2)

Buffer返回一个字节数组(range(0, 256)中的整数),所以你需要在Python中做同样的事情:

print(hashlib.sha256(bytearray.fromhex(string21)).hexdigest())

bytearray.fromhex完全按照其说法执行操作:从十六进制表示创建bytearray

编辑:由于encode已代表字节,因此无需bytearray任何内容。