调用函数参数并获取文件哈希

Calling argument to function and getting the file hashes

我正在尝试获取提供的参数文件的哈希值。这是我当前的代码:

import hashlib
import argparse


md5 = hashlib.md5()
sha1 = hashlib.sha1()
sha256 = hashlib.sha256()
BUF_SIZE = 32768

parse = argparse.ArgumentParser()
parse.add_argument("-test", help = 'testing')
args = parse.parse_args()


def hashing(hashThis=args.test):
    with open(hashThis, 'rb') as f:
        while True:
            data = f.read(BUF_SIZE)
            if not data:
                break
        md5.update(data)
        sha1.update(data)
        sha256.update(data)
    #print hashes
    print('MD5: {0}'.format(md5.hexdigest()))   
    print('SHA1: {0}'.format(sha1.hexdigest()))
    print('SHA256: {0}'.format(sha256.hexdigest()))

hashing(hashThis=args.test)

这给了我以下输出:

user@user:~/Testing$ python test.py -test test.txt
MD5: d41d8cd98f00b204e9800998ecf8427e
SHA1: da39a3ee5e6b4b0d3255bfef95601890afd80709
SHA256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

问题是给定的哈希值是针对空文件的,通过使用我得到的同一文件的 sha256sum

user@user:~/Testing$ sha256sum test.txt
8f434346648f6b96df89dda901c5176b10a6d83961dd3c1ac88b59b2dc327aa4  test.txt

它不会从文件中提取数据,如果我在函数外部使用相同的代码,它就可以工作。我觉得我错过了一些明显的东西,但无法弄清楚。

您需要更新 while 循环中的散列对象 - 现在 while 循环仅在 'data' 为空时退出,因此您散列的只是空字节数组