Python使用hashlib模块计算文件hash值
参考博客: 通过python的hashlib模块计算一个文件的MD5值
,然后自己添加了参数输入。使用Burp Suite安装包测试过,和官网给出的hash值一样。
关于文件读取的方式rb可以看这篇博客:python基础-文件读写'r' 和 'rb'区别。
import hashlib
import argparse
HASH = ['blake2b', 'blake2s', 'md5', 'pbkdf2_hmac', 'scrypt', 'sha1', 'sha224', 'sha256', 'sha384', 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', 'sha512', 'shake_128', 'shake_256']#hashlib中支持的hash函数
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument('-f',
help='input the name of file to do hash;',
type=str,
required=True)
parser.add_argument('-hash',
help='choose the hash function;',
type=str,
choices=HASH,
required=True)
return parser.parse_args()
def main():
args = parse_args()
if args.hash == 'md5':
h = hashlib.md5()
elif args.hash =='sha256':
h = hashlib.sha256()
else:
print('暂不支持该hash!')
return
with open(args.f, 'rb') as f:#一定得是rb
while 1:
data = f.read(1024)
if data:
h.update(data)
else:
break
result = h.hexdigest()
return result
if __name__ == '__main__':
print(main())
官网结果及代码效果截图:
遇到的错误
argparse.ArgumentError: argument -h: conflicting option string: -h
因为代码中hash参数设置的-h和help的-h有冲突,所以将-h修改为-hash就可以了。