微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决调用函数的参数并获取文件哈希

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

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 循环仅在“数据”为空时才退出,因此您散列的只是那个空字节数组

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。