用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 相关文章推荐
30分钟搭建Python的Flask框架并在上面编写第一个应用
Mar 30 Python
在Django框架中伪造捕捉到的URLconf值的方法
Jul 18 Python
python递归查询菜单并转换成json实例
Mar 27 Python
python使用matplotlib绘图时图例显示问题的解决
Apr 27 Python
python中reduce()函数的使用方法示例
Sep 29 Python
解决python删除文件的权限错误问题
Apr 24 Python
利用Python如何批量更新服务器文件
Jul 29 Python
使用Selenium破解新浪微博的四宫格验证码
Oct 19 Python
记一次python 内存泄漏问题及解决过程
Nov 29 Python
Python实现钉钉发送报警消息的方法
Feb 20 Python
Python 如何对文件目录操作
Jul 10 Python
Python实现冒泡排序算法的完整实例
Nov 04 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输出xml属性的方法
2015/03/19 PHP
thinkphp3.x中cookie方法的用法分析
2016/05/19 PHP
php批量删除操作代码分享
2017/02/26 PHP
javascript 自动转到命名锚记
2009/01/10 Javascript
javascript web对话框与弹出窗口
2009/02/22 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
javascript实现textarea中tab键的缩排处理方法
2015/06/26 Javascript
jQuery实现的经典滑动门效果
2015/09/22 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
2015/12/04 Javascript
基于javascript简单实现对身份证校验
2021/01/25 Javascript
微信小程序中页面FOR循环和嵌套循环
2017/06/21 Javascript
解决vue router使用 history 模式刷新后404问题
2017/07/19 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
每周一练 之 数据结构与算法(Stack)
2019/04/16 Javascript
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
Python列表的切片实例讲解
2019/08/20 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
Python操作MySQL数据库实例详解【安装、连接、增删改查等】
2020/01/17 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
详解CSS3的opacity属性设置透明效果的用法
2016/05/09 HTML / CSS
css 元素选择器的简单实例
2016/05/23 HTML / CSS
Cole Haan官方网站:美国时尚潮流品牌
2017/12/06 全球购物
Hertz荷兰:荷兰和全球租车
2018/01/07 全球购物
营销与策划个人求职信
2013/09/22 职场文书
老教师工作总结的自我评价
2013/09/27 职场文书
如何写毕业求职自荐信
2013/11/06 职场文书
班组长安全生产职责
2013/12/16 职场文书
揭牌仪式主持词
2014/03/19 职场文书
运动会入场口号
2014/06/07 职场文书
党员对照检查材料
2014/09/22 职场文书
公司禁烟通知
2015/04/23 职场文书
2016年秋季趣味运动会开幕词
2016/03/04 职场文书