【发布时间】:2021-11-19 04:31:16
【问题描述】:
我想计算一个文件(其长度可以是任意位数,因此不一定是流行的八的倍数)并将该文件与哈希值一起发送给朋友。我的朋友应该能够从文件内容中计算出相同的哈希值。我想使用 Python 3 来计算哈希,但我的朋友不能使用 Python 3(因为我会等到明年发送文件,到那时 Python 3 会过时,他会想要正在使用 Python++ 或其他)。我所能保证的是,我的朋友会知道如何计算散列,在数学意义上——他可能必须编写自己的代码才能在他的MIX 机器的实现上运行(他会知道怎么做)。
我使用什么散列,更重要的是,我使用什么散列?例如,我是否对以 text 格式打开的文件上从 read 返回的 str 进行哈希处理?我是否散列了一些从 binary read 返回的类似 bytes 的对象?如果文件有奇怪的行尾标记怎么办?我是否先填充尾端,以便我要散列的东西大小合适?
import hashlib
FILENAME = "filename"
# Now, what?
我说“位序列”是因为不是所有的计算机都是基于 8 位字节的,所以说“字节序列”太含糊了。例如GreenArrays, Inc.设计了一个supercomputer on a chip,其中每台计算机都有18位(18位)字(当这些字用于编码本机指令时,它们由三个5位“字节”和一个每个 3 位字节)。我还了解到,在 1970 年代之前,使用了各种字节大小。虽然 8 位字节可能是最常见的选择,并且在某种意义上可能是最优的,但每个字节 8 位的选择是任意的。
另见
【问题讨论】:
-
您确定要查看的是位序列而不是字节吗?我不知道任何允许以位指定文件大小的文件系统(尽管我只熟悉基于 x86 和 ARM 的机器)。无论哪种方式,您都绝对不想使用
str,因为它与文件编码分离。 -
嗯,也许我不明白。 Python 如何打开文件以读取位序列而不是字节?如果您确实需要将文件发送到具有奇异架构的计算机,您会怎么做?
标签: python hash portability