用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中尝试多线程编程的一个简明例子
Apr 07 Python
介绍Python中几个常用的类方法
Apr 08 Python
python比较两个列表大小的方法
Jul 11 Python
python 链接和操作 memcache方法
Mar 04 Python
python代码实现ID3决策树算法
Dec 20 Python
Python数据持久化shelve模块用法分析
Jun 29 Python
简单了解django索引的相关知识
Jul 17 Python
pytest中文文档之编写断言
Sep 12 Python
python scipy卷积运算的实现方法
Sep 16 Python
解决tensorflow打印tensor有省略号的问题
Feb 04 Python
Python MOCK SERVER moco模拟接口测试过程解析
Apr 13 Python
读取nii或nii.gz文件中的信息即输出图像操作
Jul 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 Header用于页面跳转要注意的几个问题总结
2008/10/03 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
2019/02/25 PHP
PHP实现随机发放扑克牌
2020/04/21 PHP
javascript 常用关键字列表集合
2007/12/04 Javascript
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
jQuery入门基础知识学习指南
2015/08/14 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
深入理解Javascript中的自执行匿名函数
2016/06/03 Javascript
JS实现Ajax的方法分析
2016/12/20 Javascript
vue 运用mock数据的示例代码
2017/11/07 Javascript
对vue里函数的调用顺序介绍
2018/03/17 Javascript
原生实现一个react-redux的代码示例
2018/06/08 Javascript
socket io与vue-cli的结合使用的示例代码
2018/11/01 Javascript
JS实现指定区域的全屏显示功能示例
2019/04/25 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
[06:24]DOTA2亚洲邀请赛小组赛第三日 TOP10精彩集锦
2015/02/01 DOTA
详解Python3中yield生成器的用法
2015/08/20 Python
python 实现一次性在文件中写入多行的方法
2019/01/28 Python
python字符串格式化方式解析
2019/10/19 Python
如何使用repr调试python程序
2020/02/28 Python
Python操作MySQL数据库的示例代码
2020/07/13 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
深入浅析CSS3中的Flex布局整理
2020/04/27 HTML / CSS
欧洲最大的品牌水上运动服装和设备在线零售商:Wuituit Outlet
2018/05/05 全球购物
美国手机支架公司:PopSockets
2019/11/27 全球购物
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
JDO的含义
2012/11/17 面试题
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
拆迁委托协议书
2014/09/15 职场文书
侵犯商业秘密的律师函
2015/05/27 职场文书
海上钢琴师观后感
2015/06/03 职场文书
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis