python - Python:如何从两个文件创建一个哈希值
问题描述
我正在寻找从两个文件创建一个哈希,但不知道如何去做。
我可以使用下面的代码一次对一个文件进行哈希处理。
#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)
理想情况下,我想对此进行调整,以便它需要两个文件并生成两个文件的一个哈希?不确定这是否真的可能。
编辑:我已将代码更新如下。它运行但我只得到以下输出,我不知道为什么。有人有任何见解吗?
组合:0x000001DFFC9929B8处_hashlib.HASH对象的内置方法hexdigest
#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))
请注意,您提供文件名的顺序很重要(即,如果您交换两个文件名,哈希值几乎肯定会不同)。
推荐阅读
- c++ - 关于C++模板中自由函数名解析的问题
- hyperledger-fabric - 运行 hurl 调用返回事务建议是错误的
- python - 如何有条件地将层添加到 Keras 模型?
- r - 获取数据框的逐行百分比
- java - IDE 和命令行中 gwt-maven-plugin 的不同行为
- report - Allure 报告仅记录第一次失败并且测试结束并且在第一次失败后不运行所有步骤
- python - 与utcfromtimestamp相反的功能?
- openshift-origin - 无法启动示例构建
- python-3.x - 是否可以从交互式散景图生成计算图/数据?
- node.js - 可以使用 nodejs 和 puppeteer 获取 HTTP 响应标头吗?