用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 28 Python
在Python的Django框架中创建语言文件
Jul 27 Python
python基础教程项目四之新闻聚合
Apr 02 Python
删除python pandas.DataFrame 的多重index实例
Jun 08 Python
pytorch 数据集图片显示方法
Jul 26 Python
解决python "No module named pip" 的问题
Oct 13 Python
Django之模型层多表操作的实现
Jan 08 Python
使用Python opencv实现视频与图片的相互转换
Jul 08 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
May 23 Python
python语言是免费还是收费的?
Jun 15 Python
如何Tkinter模块编写Python图形界面
Oct 14 Python
Python下使用Trackbar实现绘图板
Oct 27 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
建立文件交换功能的脚本(二)
2006/10/09 PHP
PHP 魔术函数使用说明
2010/05/14 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
2014/06/26 PHP
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
2014/10/29 PHP
PHP随机生成信用卡卡号的方法
2015/03/23 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
理解Javascript闭包
2013/11/01 Javascript
js打开新窗口方法整理
2014/02/17 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
老生常谈jquery id选择器和class选择器的区别
2017/02/12 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
Nodejs + Websocket 指定发送及群聊的实现
2020/01/09 NodeJs
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
使用Vue-scroller页面input框不能触发滑动的问题及解决方法
2020/08/08 Javascript
Vue中 axios delete请求参数操作
2020/08/25 Javascript
详解Django解决ajax跨域访问问题
2018/08/24 Python
Python交互式图形编程的实现
2019/07/25 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
英国最大的在线运动补充剂商店:Discount Supplements
2017/06/03 全球购物
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
潘多拉珠宝英国官方网上商店:PANDORA英国
2018/06/12 全球购物
Nebula美国官网:便携式投影仪
2019/03/15 全球购物
怎样比较两个类型为String的字符串
2016/08/17 面试题
Ibatis如何使用动态表名
2015/07/12 面试题
办公室文员自荐书
2014/02/03 职场文书
建设工地安全标语
2014/06/07 职场文书
班级体育活动总结
2014/07/05 职场文书
2014年超市工作总结
2014/11/19 职场文书
父亲节感言
2015/08/03 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
Python OpenCV实现传统图片格式与base64转换
2021/06/13 Python
Redis高并发缓存架构性能优化
2022/05/15 Redis