繁体   English   中英

如何正确进行双 SHA256 散列?

[英]How to correctly do a double SHA256 hashing?

这可能是基本的东西,但对于一般的编码来说还是很新的。

您如何正确执行双 sha256 代码?

例如,对于字符串“abc”,双散列的正确输出应该是:4f8b42c22dd3729b519ba6f68d2da7cc5b2d606d05daed5ad5128cc03e6c6358

但是,在我下面提供的脚本中,我得到了另一个输出,尽管我不知道我哪里出错了。 我在代码中遗漏了什么?

abc = 'abc'.encode("utf-8")

hashed_abc = hashlib.sha256(abc)

hashed_abc = hashlib.sha256(hashed_abc.hexdigest().encode('utf-8'))
print((hashed_abc.hexdigest()))

谢谢你。

import hashlib
import binascii
 
def doubleSha256(hex): 
   bin = binascii.unhexlify(hex)
   hash = hashlib.sha256(bin).digest()
   hash2 = hashlib.sha256(hash).digest()
   print("Input Hex: "+str(hex,"ascii"))
   print("SHA256:\n   "+str(binascii.hexlify(hash),"ascii"))
   print("Double-SHA256:\n   "+str(binascii.hexlify(hash2),"ascii"))

你可以使用这样的东西,它对我有用。

添加:

如果您在传递“abc”时遇到问题,请使用它。

ascii = "abc"
hex = binascii.hexlify(bytes(ascii,"ascii"))
doubleSha256(hex)

加密哈希函数也在处理字节和输出字节。 双 SHA256 或写为 SHA256D 也应该以这种方式工作。

import hashlib
import binascii
 
   
def SHA256D(data): 

   hash = hashlib.sha256(data).digest()

   #Uncomment me for testing
   #print(hashlib.sha256(data.encode('utf-8')).hexdigest() )
      
   return hashlib.sha256(hash).digest()
   
   
toHashB = "hello".encode('utf-8')

print(SHA256D(toHashB))

doublehashed = SHA256D(toHashB)

print( binascii.hexlify(doublehashed).decode('utf8'))

字符串“hello”的双 SHA256 哈希在比特币页面上作为示例给出。 这输出

9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a419833d50


请注意,另一个答案有两个问题;

  1. 字符串“hello” binascii.Error: Odd-length string
  2. SHA256D 执行十六进制解码和编码。 这应该在 SHA256D 之外

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM