用python计算文件的MD5值


Posted in Python onDecember 23, 2020

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

一、计算字符串的md5值

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import hashlib

reload(sys)
sys.setdefaultencoding('utf-8')

if __name__ == '__main__':
  content = "hello"
  md5hash = hashlib.md5(content)
  md5 = md5hash.hexdigest()
  print(md5)

 运行上述代码,输出:5d41402abc4b2a76b9719d911017c592

用PHP自带的md5函数计算同一个字符串,验证下hello的md5是否正确。

<?php

  $content = "hello";
  $md5 = md5($content);
  var_dump($md5);  // 输出 5d41402abc4b2a76b9719d911017c592

二、计算文件的md5值

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import hashlib

reload(sys)
sys.setdefaultencoding('utf-8')

if __name__ == '__main__':
  file_name = "3383430480_51_01.jpg"
  with open(file_name, 'rb') as fp:
    data = fp.read()
  file_md5= hashlib.md5(data).hexdigest()
  print(file_md5)   # ac3ee699961c58ef80a78c2434efe0d0

文件md5计算跟字符串计算是一样,直接使用hashlib的md5方法,然后hexdigests就好了。同样用PHP代码验证下

<?php

  $file_name = "3383430480_51_01.jpg";
  $file_md5 = md5_file($file_name);
  var_dump($file_md5);  // 输出 ac3ee699961c58ef80a78c2434efe0d0

从结果可以看出md5是一样的,文件md5值也不过如此呀,心里窃喜。。。

如果大文件呢,比如几个G呢,上述代码肯定会内存溢出,怎么办呢,可以分块读取文件内容并计算。

三、计算大文件的md5值

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import hashlib

def get_file_md5(fname):
  m = hashlib.md5()  #创建md5对象
  with open(fname,'rb') as fobj:
    while True:
      data = fobj.read(4096)
      if not data:
        break
      m.update(data) #更新md5对象

  return m.hexdigest()  #返回md5对象

reload(sys)
sys.setdefaultencoding('utf-8')

if __name__ == '__main__':
  file_name = "mongodb_us.zip"
  file_md5 = get_file_md5(file_name)
  print(file_md5)   # 0f45cdbf14de54001e82a17c3d199a4b

四、封装成常用库md5.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import hashlib

def get_file_md5(file_name):
  """
  计算文件的md5
  :param file_name:
  :return:
  """
  m = hashlib.md5()  #创建md5对象
  with open(file_name,'rb') as fobj:
    while True:
      data = fobj.read(4096)
      if not data:
        break
      m.update(data) #更新md5对象

  return m.hexdigest()  #返回md5对象


def get_str_md5(content):
  """
  计算字符串md5
  :param content:
  :return:
  """
  m = hashlib.md5(content) #创建md5对象
  return m.hexdigest()

好了,关于md5的计算就到这里,有不同见解的同学,欢迎拍砖,一起来探讨,谢谢。

以上就是用python计算文件的MD5值的详细内容,更多关于python 计算文件MD5的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
如何搜索查找并解决Django相关的问题
Jun 30 Python
Tensorflow简单验证码识别应用
May 25 Python
关于Python如何避免循环导入问题详解
Sep 14 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
Jan 07 Python
docker django无法访问redis容器的解决方法
Aug 21 Python
python被修饰的函数消失问题解决(基于wraps函数)
Nov 04 Python
python如何使用socketserver模块实现并发聊天
Dec 14 Python
Python爬虫之Spider类用法简单介绍
Aug 04 Python
python 常用日期处理-- datetime 模块的使用
Sep 02 Python
python实现扫雷游戏的示例
Oct 20 Python
详解Python为什么不用设计模式
Jun 24 Python
python编程项目中线上问题排查与解决
Nov 01 Python
python中lower函数实现方法及用法讲解
Dec 23 #Python
Python类型转换的魔术方法详解
Dec 23 #Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
Dec 23 #Python
python音频处理的示例详解
Dec 23 #Python
python 实现客户端与服务端的通信
Dec 23 #Python
python实现excel公式格式化的示例代码
Dec 23 #Python
python 基于opencv实现图像增强
Dec 23 #Python
You might like
php中取得URL的根域名的代码
2011/03/23 PHP
php打造属于自己的MVC框架
2012/03/07 PHP
php文件上传类完整实例
2016/05/14 PHP
用window.location.href实现刷新另个框架页面
2007/03/07 Javascript
javascript 日期时间函数(经典+完善+实用)
2009/05/27 Javascript
js计算页面刷新的次数
2009/07/20 Javascript
js实现简单的星级选择器提交效果适用于评论等
2013/10/18 Javascript
减少访问DOM的次数提升javascript性能
2014/02/24 Javascript
JavaScript打印网页指定区域的例子
2014/05/03 Javascript
Bootstrap进度条组件知识详解
2016/05/01 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
2016/06/13 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
原生Javascript插件开发实践
2017/01/09 Javascript
微信小程序中做用户登录与登录态维护的实现详解
2017/05/17 Javascript
Vue表单demo v-model双向绑定问题
2018/06/29 Javascript
validform表单验证的实现方法
2019/03/08 Javascript
Vue 递归多级菜单的实例代码
2019/05/05 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
js中关于Blob对象的介绍与使用
2019/11/29 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
Python命令行解析模块详解
2018/02/01 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
python爬虫工具例举说明
2020/11/30 Python
Python 中 sorted 如何自定义比较逻辑
2021/02/02 Python
python UIAutomator2使用超详细教程
2021/02/19 Python
CSS3实现菜单悬停效果
2020/11/17 HTML / CSS
函授本科毕业自我鉴定
2013/10/09 职场文书
家长会学生演讲稿
2014/04/26 职场文书
2014年党支部学习材料
2014/05/19 职场文书
自我检讨报告
2015/01/28 职场文书
办公室行政主管岗位职责
2015/04/09 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书
pandas 操作 Excel操作总结
2021/03/31 Python
python 提取html文本的方法
2021/05/20 Python
Python中的套接字编程是什么?
2021/06/21 Python
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android