md5sum 不匹配 python 生成的 md5
md5sum not matching python generated md5
我遇到了一个奇怪的问题,我的流文件中的 md5 散列与 md5sum
不匹配。奇怪的是,如果我读入文件并将其写出到第二个文件,python md5 和 md5sum second_file.txt
一致。这是哈希码:
import hashlib
import sys
file_hash = hashlib.md5()
with open(sys.argv[1], 'r') as f, open(sys.argv[2], 'w') as w:
while True:
c = f.read(1)
w.write(c)
file_hash.update(c.encode(encoding='utf-8'))
if c == '':
# end of file
break
print(file_hash.hexdigest())
两个文件都在 docker 容器中的 UTF-8
和 运行 中。我有点不知所措。有什么想法吗?
一般来说,问题可能出在 python 或 linux 中的 md5sum 函数,因此如果您提供显示不同哈希值的 linux 命令行,那将是首选。根据我的经验,这很可能发生在尝试从 "echo" 进行管道传输但忘记 "echo" 向其回显的任何内容添加换行符时。
例如,这些不匹配:
>> echo 'thing' | md5sum
>> python -c "import hashlib;print(hashlib.md5(b'thing').hexdigest())"
使用"printf"防止添加换行符。这些确实匹配:
>> printf 'thing' | md5sum
>> python -c "import hashlib;print(hashlib.md5(b'thing').hexdigest())"
您也可以将数据放在文件中:
>> printf 'thing' > temp
>> cat temp | md5sum
>> python -c "import hashlib;print(hashlib.md5(b'thing').hexdigest())"
以 "rb"
模式打开文件以获取原始字节,并跳过 encode
位...您在执行此操作时有效地更改了 md5 正在比较的字节
我遇到了一个奇怪的问题,我的流文件中的 md5 散列与 md5sum
不匹配。奇怪的是,如果我读入文件并将其写出到第二个文件,python md5 和 md5sum second_file.txt
一致。这是哈希码:
import hashlib
import sys
file_hash = hashlib.md5()
with open(sys.argv[1], 'r') as f, open(sys.argv[2], 'w') as w:
while True:
c = f.read(1)
w.write(c)
file_hash.update(c.encode(encoding='utf-8'))
if c == '':
# end of file
break
print(file_hash.hexdigest())
两个文件都在 docker 容器中的 UTF-8
和 运行 中。我有点不知所措。有什么想法吗?
一般来说,问题可能出在 python 或 linux 中的 md5sum 函数,因此如果您提供显示不同哈希值的 linux 命令行,那将是首选。根据我的经验,这很可能发生在尝试从 "echo" 进行管道传输但忘记 "echo" 向其回显的任何内容添加换行符时。
例如,这些不匹配:
>> echo 'thing' | md5sum
>> python -c "import hashlib;print(hashlib.md5(b'thing').hexdigest())"
使用"printf"防止添加换行符。这些确实匹配:
>> printf 'thing' | md5sum
>> python -c "import hashlib;print(hashlib.md5(b'thing').hexdigest())"
您也可以将数据放在文件中:
>> printf 'thing' > temp
>> cat temp | md5sum
>> python -c "import hashlib;print(hashlib.md5(b'thing').hexdigest())"
以 "rb"
模式打开文件以获取原始字节,并跳过 encode
位...您在执行此操作时有效地更改了 md5 正在比较的字节