用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实现冒泡,插入,选择排序简单实例
Aug 18 Python
python实现对文件中图片生成带标签的txt文件方法
Apr 27 Python
详解pyqt5 动画在QThread线程中无法运行问题
May 05 Python
对python3 urllib包与http包的使用详解
May 10 Python
对python的unittest架构公共参数token提取方法详解
Dec 17 Python
python sort、sort_index方法代码实例
Mar 28 Python
Django框架实现的分页demo示例
May 25 Python
使用python接入微信聊天机器人
Mar 31 Python
Python寻找路径和查找文件路径的示例
Jul 10 Python
python分布式编程实现过程解析
Nov 08 Python
PyQt5 如何让界面和逻辑分离的方法
Mar 24 Python
Python绘图之二维图与三维图详解
Aug 04 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 socket编程
2015/05/13 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
JavaScript 不只是脚本
2007/05/30 Javascript
xml 封装与解析(javascript和C#中)
2009/07/26 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
jQuery插件ajaxfileupload.js实现上传文件
2020/10/23 Javascript
js实现tab切换效果
2017/02/16 Javascript
angular4中关于表单的校验示例
2017/10/16 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
2018/01/03 Javascript
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
从源码里了解vue中的nextTick的使用
2018/11/22 Javascript
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
今天,小程序正式支持 SVG
2019/04/20 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
Python实现的二维码生成小软件
2014/07/11 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
python+os根据文件名自动生成文本
2019/03/21 Python
pip install python 快速安装模块的教程图解
2019/10/08 Python
python如何进行矩阵运算
2020/06/05 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2020/10/15 Python
韩国演唱会订票网站:StubHub韩国
2019/01/17 全球购物
美国主要的特色咖啡和茶公司:Peet’s Coffee
2020/02/14 全球购物
小学生自我评价范例
2013/09/24 职场文书
财务助理岗位职责
2013/11/10 职场文书
社会实践活动总结范文
2014/07/03 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
婚礼父母答谢词
2015/01/04 职场文书
平遥古城导游词
2015/02/03 职场文书
nginx负载功能+nfs服务器功能解析
2022/02/28 Servers
Selenium浏览器自动化如何上传文件
2022/04/06 Python
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL
Python find()、rfind()方法及作用
2022/12/24 Python