用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 getopt模块处理命令行选项实例
May 13 Python
使用python开发vim插件及心得分享
Nov 04 Python
为python设置socket代理的方法
Jan 14 Python
Python中for循环和while循环的基本使用方法
Aug 21 Python
Python实时获取cmd的输出
Dec 13 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
Python 异常处理的实例详解
Sep 11 Python
30秒轻松实现TensorFlow物体检测
Mar 14 Python
Python时间序列处理之ARIMA模型的使用讲解
Apr 02 Python
selenium+python自动化测试环境搭建步骤
Jun 03 Python
Python 使用 PyQt5 开发的关机小工具分享
Jul 16 Python
Python正则re模块使用步骤及原理解析
Aug 18 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
采用ThinkPHP中F方法实现快速缓存实例
2014/06/13 PHP
PHP的Socket通信之UDP通信实例
2015/07/02 PHP
基于PHP实现商品成交时发送短信功能
2016/05/11 PHP
JavaScript实现级联菜单的方法
2015/06/29 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
使用jquery提交form表单并自定义action的实现代码
2016/05/25 Javascript
微信小程序 实战小程序实例
2016/10/08 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
Javascript(es2016) import和require用法和区别详解
2017/08/11 Javascript
[原创]jquery判断元素内容是否为空的方法
2018/05/04 jQuery
详解使用mpvue开发github小程序总结
2018/07/25 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
Vue3.0结合bootstrap创建多页面应用
2019/05/28 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
原生小程序封装跑马灯效果
2020/10/21 Javascript
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
Python实现发送与接收邮件的方法详解
2018/03/28 Python
python使用Flask操作mysql实现登录功能
2018/05/14 Python
深入分析python中整型不会溢出问题
2018/06/18 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
django fernet fields字段加密实践详解
2019/08/12 Python
pytorch中的transforms模块实例详解
2019/12/31 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
Myprotein中国网站:欧洲畅销运动营养品牌
2021/02/11 全球购物
国际语言毕业生求职信
2014/07/08 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
离婚协议书样本
2015/01/26 职场文书
基于python的matplotlib制作双Y轴图
2021/04/20 Python
Python基础之Socket通信原理
2021/04/22 Python