用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脚本暴力破解栅栏密码
Oct 19 Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
Jan 20 Python
python读取一个目录下所有txt里面的内容方法
Jun 23 Python
Python/ArcPy遍历指定目录中的MDB文件方法
Oct 27 Python
Python XML转Json之XML2Dict的使用方法
Jan 15 Python
Python的垃圾回收机制详解
Aug 28 Python
Django之使用内置函数和celery发邮件的方法示例
Sep 16 Python
pandas中遍历dataframe的每一个元素的实现
Oct 23 Python
基于Tensorflow批量数据的输入实现方式
Feb 05 Python
Python文件操作及内置函数flush原理解析
Oct 13 Python
深入理解Python变量的数据类型和存储
Feb 01 Python
如何利用pygame实现打飞机小游戏
May 30 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中使用PDF文档功能
2006/10/09 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
理解php依赖注入和控制反转
2016/05/11 PHP
php的对象传值与引用传值代码实例讲解
2021/02/26 PHP
javascript import css实例代码
2008/07/18 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
扩展JS Date对象时间格式化功能的小例子
2013/12/02 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
JQuery跳出each循环的方法
2015/04/16 Javascript
iScroll.js 使用方法参考
2016/05/16 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
jQuery事件绑定用法详解
2016/09/08 Javascript
jQuery插件zTree实现获取一级节点数据的方法
2017/03/08 Javascript
vue子父组件通信的实现代码
2017/07/09 Javascript
Vue中保存数据到磁盘文件的方法
2018/09/06 Javascript
微信小程序实现登录遮罩效果
2018/11/01 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
[42:48]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第二场 12.11
2020/12/16 DOTA
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
pycharm+django创建一个搜索网页实例代码
2018/01/24 Python
Python实现简单生成验证码功能【基于random模块】
2018/02/10 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
python json.dumps() json.dump()的区别详解
2020/07/14 Python
街头时尚在线:JESSICABUURMAN
2019/06/16 全球购物
暑假家长评语大全
2014/04/17 职场文书
森林防火标语
2014/06/23 职场文书
大学第二课堂活动总结
2014/07/08 职场文书
2014年小学英语教师工作总
2014/12/03 职场文书
2016中学教师读书心得体会
2016/01/13 职场文书
《飘》英文读后感五篇
2019/10/11 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书
python 爬取哔哩哔哩up主信息和投稿视频
2021/06/07 Python
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python