0

我正在尝试创建一个 python 程序,它会给我一个为我提供的最终哈希。

最终哈希: 42EE53E049F4E104BF81A517C5ED52BE2D94487A253FCF978CE783A3529794BC 使用以下 5 个哈希值:

  • 哈希1:F7002A5259567B1F993E743D3128B6A97B153EACFC7BB914802DCFB43D23FA2E
  • 哈希2:6E2B86DC5982F533C3A896E66B97D377D09E7988B7E27E9BE5DDBA9F34C325FC
  • 哈希3:83AAB3327FFF40207AEB5919BD7FB06BAE953324FC71EE35816076CD6480334A
  • 哈希4:0B794C734A46D75BE2EEE543F714E8D7E2D41D0549D4D8E1167B77B63080DE83
  • 哈希5:EC40BD8242061EF401305485800CA5D63A9AB6DA659221A27C7BFAD3A9694E6C

以及以下的初始哈希:E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855

这 5 个哈希值和初始值需要与最终哈希值匹配。

我试图创建一个while循环,并且我试图重新排序哈希值,例如,而不是“1,2,3,4,5”我试过“3,5,4,1,2”来看看我是否得到最终值。

import hashlib

chain = hashlib.sha256()

#Hash 1
hash_1 = hashlib.sha256(b"This is my first hash")
hex_dig = hash_1.hexdigest().upper()
print("\nOld:",hex_dig)

#Hash 2
hash_2 = hashlib.sha256(b"This is my second hash")
hex_dig2 = hash_2.hexdigest().upper()
print("\nOld:",hex_dig2)

#Hash 3
hash_3 = hashlib.sha256(b"This is my third hash")
hex_dig3 = hash_3.hexdigest().upper()
print("\nOld:", chain.hexdigest().upper())

#Hash 4
hash_4 = hashlib.sha256(b"This is my forth hash")
hex_dig4 = hash_4.hexdigest().upper()
print("\nold:", chain.hexdigest().upper())

#Hash 5
hash_5 = hashlib.sha256(b"This is my fifth hash")
hex_dig5 = hash_5.hexdigest().upper()
print("\nOld:", chain.hexdigest().upper())

print("\nUpdated Chain\nAdding:\t",hash_3.hexdigest().upper())
chain.update(hash_3.digest())
print("New:\t",chain.hexdigest().upper())

print("\nUpdated Chain\nAdding:\t",hash_1.hexdigest().upper())
chain.update(hash_1.digest())
print("New:\t",chain.hexdigest().upper())

print("\nUpdated Chain\nAdding:\t",hash_2.hexdigest().upper())
chain.update(hash_2.digest())
print("New:\t",chain.hexdigest().upper())

print("\nUpdated Chain\nAdding:\t",hash_5.hexdigest().upper())
chain.update(hash_5.digest())
print("New:\t",chain.hexdigest().upper())

print("\nUpdated Chain\nAdding:\t",hash_4.hexdigest().upper())
chain.update(hash_4.digest())
print("New:\t",chain.hexdigest().upper())

print("\nFinal Chain:\n", chain.hexdigest().upper())

chain = hashlib.sha256()
print("\nInitial Chain:\n",chain.hexdigest().upper())

我希望输出是最终链:42EE53E049F4E104BF81A517C5ED52BE2D94487A253FCF978CE783A3529794BC

4

1 回答 1

0

您应该使用该数据的 SHA256 摘要而不是该数据的 SHA256 摘要添加实际数据update()

代替

hash_1 = hashlib.sha256(b"This is my first hash")
#...
chain.update(hash1.digest())

你想要更多的东西

chain.update(b"This is my first hash")

如果您还想计算并显示您添加的每个项目的哈希值,那么update一些简单的重构也应该允许您这样做;但我相信这是你问题的要点。

这是替换您的未经测试的代码:

import hashlib

chain = hashlib.sha256()
print("Initial Chain: {0}".format(chain.hexdigest().upper()))

for data in (b"This is my first hash", b"This is my second hash",
        b"This is my third hash", b"This is my forth hash", b"This is my fifth hash"):
    hash = hashlib.sha256(data)
    print("Add: {0}".format(hash_1.hexdigest().upper()))
    chain.update(data)
    print("New:\t{0}".format(chain.hexdigest().upper()))
于 2019-07-24T06:43:46.903 回答