一、使用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相关推荐

  1. python计算文件md5值_用python计算文件的MD5值

    md5是一种常见不可逆加密算法,使用简单,计算速度快,在很多场景下都会用到,比如:给用户上传的文件命名,数据库中保存的用户密码,下载文件后检验文件是否正确等.下面讲解在python中如何使用md5算法 ...

  2. python计算文件md5值_用python 正确计算大文件md5 值

    python 计算文件的md5值很方便,但如果只是简单的把文件都入到内存中,大文件会导致问题,一般采用切片的方式分段计算,下面的几个函数可以很好的解决这个问题. 使用 hashlib import h ...

  3. python3计算md5_python 计算文件的md5值实例

    较小文件处理方法: import hashlib import os def get_md5_01(file_path): md5 = None if os.path.isfile(file_path ...

  4. Python计算文件或字符串的MD5/SHA

    本文章讲如何通过Python实现计算文件或字符串的MD5, SHA1, SHA224, SHA256, SHA384, SHA512值. 原文:https://blog.zeruns.tech/arc ...

  5. c语言md5函数 linux,Linux下C语言计算文件的md5值(长度32)

    google了好久都没有找到合适的,其实我只需要一个函数,能计算文件的 md5 值就好, 后来找到了 md5.h 和 md5.c 的源文件,仿照别人的封装了个函数(他那个有问题,和 md5sum 计算 ...

  6. 使用Windows自带的工具计算文件的 MD5 SHA1 SHA256

    使用Windows自带的工具计算文件的 MD5 SHA1 SHA256 很多网站会提供下载文件的校验码信息,在下载文件之后,如何方便地计算MD5 SHA1 SHA256等校验和呢?之前我常用的工具是H ...

  7. linux 文件md5,Linux下计算文件的MD5值

    脚本功能 脚本使用Perl编写,计算文件的MD5值 脚本用途 服务器在安装完操作系统后,计算PATH变量里面所有的二进制文件的MD5.计算单个文件MD5值.计算某个目录(包括子目录)下所有的文件的MD ...

  8. 使用Java计算文件的MD5值(含修改MD5值的方法)

    什么是 MD5 ? MD5(Message Digest Algorithm,信息摘要算法),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保 ...

  9. 【Python】计算文件的MD5、SHA1、SHA256值(校验文件完整性)

    引言 从网络上下载大文件时,官网一般都会提供一个MD5.SHA1或SHA256值: 很多同学可能会好奇这些东西到底是干嘛的?其实这是用来校验文件完整性的.因为从网络上下载大文件具有不确定性,可能会受很 ...

最新文章

  1. 接下来学习计划2020.11.9
  2. java servlet是接口_JavaWeb:Servlet 接口
  3. weblogic创建域后启动不了_摩托车淋雨后启动不了什么原因?如何解决?
  4. keil html转换工具,网页转换工具FCARM和makefsfile的使用简介
  5. 【Vue】父子组件的传值(父组件-->子组件、子组件-->父组件)
  6. oracle同步数据adg_数据库周刊31丨华为openGauss 正式开源;7月数据库排行榜发布......
  7. Java 读取文件大写和格式化输出字串
  8. java内部类的作用_java 内部类的好处和缺点(上)
  9. c语言进阶.pdf,C语言程序设计进阶:文件.pdf
  10. spring boot(三) 集成mybatis
  11. 2.Entity Framework Core 5.0 创建数据库(code frist)和迁移
  12. .net cms系统
  13. 灵飞经 ①洪武天下 第二章 紫禁深深
  14. 腾讯bugly接入详解
  15. 华硕路由 ac ax_【路由器】华硕网络开启802.11ax电竞生态
  16. Java 的字节与字符输入/输出流的类整理——zyx笔记
  17. BAT之变:瘦死的骆驼比马大
  18. 错误模块名称: KERNELBASE.dll解决方案
  19. 60万奖金“人脸攻防大战”,全部进阶妙招奉上丨独家公开课实录(3)
  20. 8821AU双频抓包案例

热门文章

  1. 将matpoltlib绘制好的图片从内存中取出
  2. wpf 依赖属性和附加属性
  3. zabbix-2.4.8使用yum一键部署zabbix
  4. 总结接口与类和抽象类的关系
  5. commonrpc 1.0 发布,高性能分布式 RPC 框架
  6. [转]PHP--优化PHP代码建议
  7. build-android-in-OS-X-Yosemite-Xcode-7
  8. 构造函数,析构函数,对象连的简单应用
  9. 大数据时代的网络视频营销
  10. C# 中Excel导出,可以自由设置导出的excel格式