转自:https://zhuanlan.zhihu.com/p/168608305
# Python计算字符串或文件的MD5/SHA值import timeimport osimport hashlib# 计算文件的MD5/SHA值def file(path, algorithm):global start, end # 声明全局变量start = time.time() # 获取当前时间,用于记录计算过程的耗时size = os.path.getsize(path) # 获取文件大小,单位是字节(byte)with open(path, 'rb') as f: # 以二进制模式读取文件while size >= 1024 * 1024: # 当文件大于1MB时将文件分块读取algorithm.update(f.read(1024 * 1024))size -= 1024 * 1024algorithm.update(f.read())end = time.time() # 获取计算结束后的时间print()print(algorithm.hexdigest()) # 输出计算结果# 计算字符串的MD5/SHA值def str(text, algorithm):global start, endstart = time.time()algorithm.update(text.encode(encoding='UTF-8'))end = time.time()print()print(algorithm.hexdigest())print('https://blog.zeruns.tech')print('1.MD5 2.SHA1 3.SHA224 4.SHA256 5.SHA384 6.SHA512')flag1 = int(input('请选择算法:'))print('\n1.文件 2.字符串')flag2 = int(input('请选择要计算的是文件还是字符串:'))if flag2 == 1:path = input('\n请输入要计算的文件的目录(若跟脚本同目录直接输入文件名即可):')if flag1 == 1:file(path, hashlib.md5())elif flag1 == 2:file(path, hashlib.sha1())elif flag1 == 3:file(path, hashlib.sha224())elif flag1 == 4:file(path, hashlib.sha256())elif flag1 == 5:file(path, hashlib.sha384())elif flag1 == 6:file(path, hashlib.sha512())elif flag2 == 2:text = input('\n请输入要加密的字符串:')if flag1 == 1:str(text, hashlib.md5())elif flag1 == 2:str(text, hashlib.sha1())elif flag1 == 3:str(text, hashlib.sha224())elif flag1 == 4:str(text, hashlib.sha256())elif flag1 == 5:str(text, hashlib.sha384())elif flag1 == 6:str(text, hashlib.sha512())print("\n计算耗时: %s seconds" % (end - start))
