【问题标题】:Calling argument to function and getting the file hashes调用函数的参数并获取文件哈希
【发布时间】:2021-08-21 23:50:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: python function hash hashlib


    【解决方案1】:

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

    【讨论】:

    • 是的,我知道这很明显。只需 1 个标签即可,哈哈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多