Python:如何从两个文件创建一个哈希值

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (11)

我想从两个文件创建一个哈希,但不知道如何做到这一点。

我可以使用下面的代码一次散列一个文件。

#functions: create sha384 hash
def create_hash(folder, filename):
    BLOCKSIZE = 65536
    hasher = hashlib.sha384()
    with open(folder + filename, 'rb') as afile:
        buf = afile.read(BLOCKSIZE)
        while len(buf) > 0:
            hasher.update(buf)
            buf = afile.read(BLOCKSIZE)
    #print(hasher.hexdigest())
    return BLOCKSIZE, hasher

BLOCKSIZE, hasher = create_hash(ARCHIVE_FOLDER, ARCHIVE_FILENAME)

理想情况下,我想对此进行调整,以便它将需要两个文件并生成两个文件的一个哈希值?不确定这是否真的可行。

编辑:我已经更新了代码如下。它运行,但我只得到以下输出,我不知道为什么。有人有任何见解吗?

组合:_hashlib.HASH对象的内置方法hexdigest在0x000001DFFC9929B8

#functions: create sha384 hash
def create_hash2(folder, filename1, filename2):
    BLOCKSIZE = 65536
    hasher = hashlib.sha384()
    with open(folder + filename1, 'rb') as afile, open(folder + filename2, 'rb') as bfile:
        buf = afile.read(BLOCKSIZE) and bfile.read(BLOCKSIZE)
        while len(buf) > 0:
            hasher.update(buf)
            buf = afile.read(BLOCKSIZE) and bfile.read(BLOCKSIZE)
    #print(hasher.hexdigest())
    return BLOCKSIZE, hasher

        #test
        BLOCKSIZE, hasher = create_hash2(ARCHIVE_FOLDER, '1--2019-06-13-archive.zip', '2--2019-06-13-archive.zip')
        print('combined: ' + str(hasher.hexdigest))
提问于
用户回答回答于

你可以循环这些文件:

def create_hash(folder, filenames):  # takes an arbitrary number of filenames
    BLOCKSIZE = 65536
    hasher = hashlib.sha384()
    for filename in filenames:
        with open(folder + filename, 'rb') as afile:
            buf = afile.read(BLOCKSIZE)
            while len(buf) > 0:
                hasher.update(buf)
                buf = afile.read(BLOCKSIZE)
    return BLOCKSIZE, hasher

BLOCKSIZE, hasher = create_hash(ARCHIVE_FOLDER, (ARCHIVE_FILENAME_1, ARCHIVE_FILENAME_2))

请注意,提供文件名的顺序很重要(例如,如果将两个文件名交换,则哈希几乎肯定会有所不同)。

扫码关注云+社区

领取腾讯云代金券