2020-07-23 今日知识

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就可以了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容