Python 如何计算两个相似文件的相同哈希?
我想应用一个散列算法,如果两个文件相似,则散列相同。如果丢失一位,则文件的散列将更改。我可以在Python中应用什么算法来解决这个问题 多谢各位 我听说布洛克会这么做,但我不知道如何应用它 我应用了以下算法,但它没有帮助Python 如何计算两个相似文件的相同哈希?,python,python-3.x,Python,Python 3.x,我想应用一个散列算法,如果两个文件相似,则散列相同。如果丢失一位,则文件的散列将更改。我可以在Python中应用什么算法来解决这个问题 多谢各位 我听说布洛克会这么做,但我不知道如何应用它 我应用了以下算法,但它没有帮助 import hashlib file = "Annotation 2020-04-09 163448.png" # Location of the file (can be set a different way) BLOCK_SIZE = 65536 # The size
import hashlib
file = "Annotation 2020-04-09 163448.png" # Location of the file (can be set a different way)
BLOCK_SIZE = 65536 # The size of each read from the file
file_hash = hashlib.sha256() # Create the hash object, can use something other than `.sha256()` if you wish
with open(file, 'rb') as f: # Open the file to read it's bytes
fb = f.read(BLOCK_SIZE) # Read from the file. Take in the amount declared above
while len(fb) > 0: # While there is still data being read from the file
file_hash.update(fb) # Update the hash
fb = f.read(BLOCK_SIZE) # Read the next block from the file
print (file_hash.hexdigest()) # Get the hexadecimal digest of the hash
散列算法的全部要点是,如果源文件中的任何一位不同,它们就会变得完全不同,以确保生成散列冲突变得具有挑战性。以下是一些解决方法:
sum(file)%(2^32)
,在某些情况下,类似的文件会给出很多类似的哈希值,但是很难根据最终的哈希值确定实际的相似性,因为文件中任何地方的一个字节的差异都会使哈希值产生很大的差异,如果您将所有哈希值都包含在256以内,许多文件仍然会被认为是相似的,即使它们不是,并且您错过了所有相差两个字节或更多的文件这取决于您的用例,这些技术中哪些适合您,但请注意,这不是一项容易的任务。祝你好运 据我所知,您需要一个哈希算法,如果文件相似,它将返回一个相似的哈希,对吗?是的@mousetail,它是correctOr,类似于块哈希。我们从文件中计算X个散列量。如果80%的散列匹配,那么文件是相同的?我想说加密散列函数的全部要点是,如果输入稍有变化,它们就会完全不同。正常的散列函数只将任意大小的输入映射到固定大小的输出。是的,您是对的,对于非加密散列函数,更改每一位的散列的理由有点不同,主要是因为当您有大量类似的条目时,这正是避免冲突的最佳方法