gpt4 book ai didi

Python hashlib 模块产生奇怪的结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:24:44 25 4
gpt4 key购买 nike

我正在使用 hashlib 模块来检验关于哈希算法的假设,但我得到了奇怪的结果。我用 Windows fciv 程序检查我的结果。我使用的工作流程是这样的:

  1. 从用户那里收集文件和算法。
  2. 使用该算法打印出原始文件名和散列文件。
  3. 在 Windows 中使用 fciv 测试结果。
  4. 向文件添加几个字节或一个空格字符。
  5. 使用所选算法打印出新的哈希文件。
  6. 使用 fciv 中的更新文件测试结果。

问题是这样的:

当我使用 .txt 文件时,我从我的程序和 fciv 中得到了不同的结果。这非常有效。

这是输出:

Original Filename: example_docs\testDocument.txt
Original md5 Hash: 62bef8046d4bcbdc46ac81f5e4202fe7
Updated md5 Hash: 78a96b792cf2ea160db5e4823f4bf0c5

但是,当我使用 .mp4 视频文件时,fciv 显示不同的哈希值,但我的程序却没有。

这是输出:

Original Filename: example_docs\testVideo.mp4
Original md5 Hash: 9a7dcb986e2e756dda60e851a0b03916
Updated md5 Hash: 9a7dcb986e2e756dda60e851a0b03916

无论我运行我的程序多少次,散列在我的程序输出中保持不变,但 fciv 显示不同的结果。

这是我的代码片段:

def getHash(filename, algorithm):
h = hashlib.new(algorithm)
h.update(filename)
return h.hexdigest()

print "Original Filename: {file}".format(file=args.file)
with open(args.file, "a+") as inFile:
h = getHash(inFile.read(), args.algorithm)
print "Original {hashname} Hash: {hashed_file}".format(hashname=args.algorithm, hashed_file=h)

with open(args.file, "a+") as inFile:
inFile.write(b'\x07\x08\x07') # Also worked with inFile.write(" ")

with open(args.file, "a+") as inFile:
h = getHash(inFile.read(), args.algorithm)
print "Updated {hashname} Hash: {hashed_file}".format(hashname=args.algorithm, hashed_file=h)

其中 args.algorithmmd5args.file 是用户提供的文件名。

最佳答案

使用 ab+ 始终以二进制模式打开文件。否则 Windows 上的 Python 将对它认为是文本文件的内容使用文本模式。

但我确实想知道为什么你会使用 ab+ 而不是 rb+ 如果你打算像使用 ab+ 文件一样读取整个文件指针从末尾开始,与 rb+ 一样,它从文件的开头开始。

参见 https://stackoverflow.com/a/23566951一个很好的文件模式列表。

关于Python hashlib 模块产生奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27419498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com