用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 深入理解yield
Sep 06 Python
Python群发邮件实例代码
Jan 03 Python
Python数据类型详解(二)列表
May 08 Python
Python使用QQ邮箱发送Email的方法实例
Feb 09 Python
django 常用orm操作详解
Sep 13 Python
python不换行之end=与逗号的意思及用途
Nov 21 Python
Python判断两个对象相等的原理
Dec 12 Python
浅谈python的深浅拷贝以及fromkeys的用法
Mar 08 Python
Python使用graphviz画流程图过程解析
Mar 31 Python
Python定义函数实现累计求和操作
May 03 Python
Python面向对象特殊属性及方法解析
Sep 16 Python
Python调用系统命令os.system()和os.popen()的实现
Dec 31 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实现数据分页显示功能
2016/05/26 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
JavaScript CSS 修改学习第四章 透明度设置
2010/02/19 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
2015/10/23 Javascript
JavaScript小技巧整理篇(非常全)
2016/01/26 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
JS设置随机出现2个数字的实例代码
2017/07/19 Javascript
使用mock.js随机数据和使用express输出json接口的实现方法
2018/01/07 Javascript
Parcel 打包示例(React HelloWorld)
2018/01/16 Javascript
vue自定义底部导航栏Tabbar的实现代码
2018/09/03 Javascript
对angular 监控数据模型变化的事件方法$watch详解
2018/10/09 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
2019/05/16 Javascript
Vuex中的Mutations的具体使用方法
2020/06/01 Javascript
JavaScript this关键字的深入详解
2021/01/14 Javascript
Python Mysql数据库操作 Perl操作Mysql数据库
2009/01/12 Python
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
python的多重继承的理解
2017/08/06 Python
python解析含有重复key的json方法
2019/01/22 Python
Django实现发送邮件找回密码功能
2019/08/12 Python
Python高阶函数、常用内置函数用法实例分析
2019/12/26 Python
python与mysql数据库交互的实现
2020/01/06 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
2020/02/12 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
2020/06/29 Python
pytorch 中forward 的用法与解释说明
2021/02/26 Python
CSS3制作苹果风格键盘特效
2015/02/26 HTML / CSS
网络管理专业求职信
2014/03/15 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
2015年初中元旦晚会活动总结
2014/11/28 职场文书
老乡会致辞
2015/07/28 职场文书
幼儿园保教工作总结2015
2015/10/15 职场文书
2016年社区六一儿童节活动总结
2016/04/06 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS
 Redis 串行生成顺序编码的方法实现
2022/04/03 Redis