python 计算文件的MD5
一、使用python自带的hash库hashlib
对于大文件,不能简单的一次载入内存,需要对文件分片不断的update完成(代码中如果文件超过100M,就需要分片了)。具体代码如下:
1 import os 2 import sys 3 import hashlib 4 5 _FILE_SLIM = (100*1024*1024) # 100MB 6 7 8 def file_md5(filename): 9 calltimes = 0 10 hmd5 = hashlib.md5() 11 fp = open(filename,"rb") 12 f_size = os.stat(filename).st_size 13 if f_size>_FILE_SLIM: 14 while(f_size>_FILE_SLIM): 15 hmd5.update(fp.read(_FILE_SLIM)) 16 f_size/=_FILE_SLIM 17 calltimes += 1 #delete 18 if(f_size>0) and (f_size<=_FILE_SLIM): 19 hmd5.update(fp.read()) 20 else: 21 hmd5.update(fp.read()) 22 23 return (hmd5.hexdigest(),calltimes) 24 25 26 if __name__ == '__main__': 27 if len(sys.argv) == 2: 28 filepath = os.path.abspath(sys.argv[1]) 29 (hvalue,ctimes) = file_md5(filepath) 30 print(hvalue) 31 32
二、测试
从meizu官网上下了个固件更新包,检测测试了下,没有问题。
测试执行:python calc_file_md5.py filename
三、更新下代码
可以计算hashlib中所有的所有的hash值,包括:md5, sha1, sha224, sha256, sha384, sha512.
主要思路是:采用字典结构来存储hash函数,达到泛型。
代码如下:
1 # coding=gbk 2 __doc__ = ''' 3 filehash.py md5/sha1/sha224/sha256/sha384/sha512 targetfile 4 argc must be equal to 3 5 ''' 6 7 import os 8 import hashlib 9 10 __supported_hashfunc = {'md5':hashlib.md5, 'sha1':hashlib.sha1, 'sha224':hashlib.sha224, 'sha256':hashlib.sha256, 'sha384':hashlib.sha384, 'sha512':hashlib.sha512} 11 __FILE_SLIM = (100*1024*1024) # 100MB 12 13 def filehash(hfunc,filename): 14 hobj = hfunc() 15 fp = open(filename,"rb") 16 f_size = os.stat(filename).st_size 17 while(f_size > __FILE_SLIM): 18 hobj.update(fp.read(__FILE_SLIM)) 19 f_size /= __FILE_SLIM 20 #print("o.o") 21 if(f_size>0) and (f_size <= __FILE_SLIM): 22 hobj.update(fp.read()) 23 fp.close() 24 return hobj.hexdigest() 25 26 def main(): 27 import sys 28 if len(sys.argv) == 3: 29 try: 30 hfunc = __supported_hashfunc[sys.argv[1].lower()] 31 #print(sys.argv[1]) 32 filepath = os.path.abspath(sys.argv[2]) 33 hvalue = filehash(hfunc,filepath) 34 print(sys.argv[1],hvalue,sep=':') 35 except KeyError: 36 print('''input cmd:"%s" is error'''%sys.argv[1]) 37 else: 38 print(__doc__) 39 if __name__ == '__main__': 40 main() 41
转载于:https://www.cnblogs.com/lonelytree/p/3238433.html
python 计算文件的MD5相关推荐
- python计算文件md5值_用python计算文件的MD5值
md5是一种常见不可逆加密算法,使用简单,计算速度快,在很多场景下都会用到,比如:给用户上传的文件命名,数据库中保存的用户密码,下载文件后检验文件是否正确等.下面讲解在python中如何使用md5算法 ...
- python计算文件md5值_用python 正确计算大文件md5 值
python 计算文件的md5值很方便,但如果只是简单的把文件都入到内存中,大文件会导致问题,一般采用切片的方式分段计算,下面的几个函数可以很好的解决这个问题. 使用 hashlib import h ...
- python3计算md5_python 计算文件的md5值实例
较小文件处理方法: import hashlib import os def get_md5_01(file_path): md5 = None if os.path.isfile(file_path ...
- Python计算文件或字符串的MD5/SHA
本文章讲如何通过Python实现计算文件或字符串的MD5, SHA1, SHA224, SHA256, SHA384, SHA512值. 原文:https://blog.zeruns.tech/arc ...
- c语言md5函数 linux,Linux下C语言计算文件的md5值(长度32)
google了好久都没有找到合适的,其实我只需要一个函数,能计算文件的 md5 值就好, 后来找到了 md5.h 和 md5.c 的源文件,仿照别人的封装了个函数(他那个有问题,和 md5sum 计算 ...
- 使用Windows自带的工具计算文件的 MD5 SHA1 SHA256
使用Windows自带的工具计算文件的 MD5 SHA1 SHA256 很多网站会提供下载文件的校验码信息,在下载文件之后,如何方便地计算MD5 SHA1 SHA256等校验和呢?之前我常用的工具是H ...
- linux 文件md5,Linux下计算文件的MD5值
脚本功能 脚本使用Perl编写,计算文件的MD5值 脚本用途 服务器在安装完操作系统后,计算PATH变量里面所有的二进制文件的MD5.计算单个文件MD5值.计算某个目录(包括子目录)下所有的文件的MD ...
- 使用Java计算文件的MD5值(含修改MD5值的方法)
什么是 MD5 ? MD5(Message Digest Algorithm,信息摘要算法),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保 ...
- 【Python】计算文件的MD5、SHA1、SHA256值(校验文件完整性)
引言 从网络上下载大文件时,官网一般都会提供一个MD5.SHA1或SHA256值: 很多同学可能会好奇这些东西到底是干嘛的?其实这是用来校验文件完整性的.因为从网络上下载大文件具有不确定性,可能会受很 ...
最新文章
- 接下来学习计划2020.11.9
- java servlet是接口_JavaWeb:Servlet 接口
- weblogic创建域后启动不了_摩托车淋雨后启动不了什么原因?如何解决?
- keil html转换工具,网页转换工具FCARM和makefsfile的使用简介
- 【Vue】父子组件的传值(父组件-->子组件、子组件-->父组件)
- oracle同步数据adg_数据库周刊31丨华为openGauss 正式开源;7月数据库排行榜发布......
- Java 读取文件大写和格式化输出字串
- java内部类的作用_java 内部类的好处和缺点(上)
- c语言进阶.pdf,C语言程序设计进阶:文件.pdf
- spring boot(三) 集成mybatis
- 2.Entity Framework Core 5.0 创建数据库(code frist)和迁移
- .net cms系统
- 灵飞经 ①洪武天下 第二章 紫禁深深
- 腾讯bugly接入详解
- 华硕路由 ac ax_【路由器】华硕网络开启802.11ax电竞生态
- Java 的字节与字符输入/输出流的类整理——zyx笔记
- BAT之变:瘦死的骆驼比马大
- 错误模块名称: KERNELBASE.dll解决方案
- 60万奖金“人脸攻防大战”,全部进阶妙招奉上丨独家公开课实录(3)
- 8821AU双频抓包案例