用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 相关文章推荐
用Python编写分析Python程序性能的工具的教程
Apr 01 Python
Python中的测试模块unittest和doctest的使用教程
Apr 14 Python
python基础教程项目二之画幅好画
Apr 02 Python
python+pandas分析nginx日志的实例
Apr 28 Python
解决Python pandas plot输出图形中显示中文乱码问题
Dec 12 Python
使用python 写一个静态服务(实战)
Jun 28 Python
详解Python并发编程之从性能角度来初探并发编程
Aug 23 Python
Python 矩阵转置的几种方法小结
Dec 02 Python
Python中内建模块collections如何使用
May 27 Python
为什么python比较流行
Jun 19 Python
Python可视化工具如何实现动态图表
Oct 23 Python
Python爬虫进阶之Beautiful Soup库详解
Apr 29 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
PHP5.3与5.5废弃与过期函数整理汇总
2014/07/10 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
javascript div 弹出可拖动窗口
2009/02/26 Javascript
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
createElement与createDocumentFragment的点点区别小结
2011/12/19 Javascript
深入分析js中的constructor和prototype
2012/04/07 Javascript
javascript 函数声明与函数表达式的区别介绍
2013/10/05 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
获取input标签的所有属性的方法
2016/06/28 Javascript
jQuery文字提示与图片提示效果实现方法
2016/07/04 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
2016/10/28 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
2016/12/07 Javascript
基于vuejs实现一个todolist项目
2017/04/11 Javascript
JS+canvas绘制的动态机械表动画效果
2017/09/12 Javascript
NVM安装nodejs的方法实用步骤
2019/01/16 NodeJs
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
2019/06/04 Javascript
在微信小程序中使用vant的方法
2019/06/07 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
2019/11/20 Javascript
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
python简单获取本机计算机名和IP地址的方法
2015/06/03 Python
python如何压缩新文件到已有ZIP文件
2018/03/14 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
TensorFlow实现非线性支持向量机的实现方法
2018/04/28 Python
浅谈Django的缓存机制
2018/08/23 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
HTML5去掉输入框type为number时的上下箭头的实现方法
2020/01/03 HTML / CSS
美国一家运动专业鞋类零售商:Warehouse Shoe Sale(WSS)
2018/03/28 全球购物
实习自我鉴定
2013/12/15 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
文言文辞职信
2015/02/28 职场文书
员工自我工作评价
2015/03/06 职场文书
公司地址变更通知
2015/04/25 职场文书
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers