用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的Django中django-userena组件的简单使用教程
May 30 Python
Python文档生成工具pydoc使用介绍
Jun 02 Python
Collatz 序列、逗号代码、字符图网格实例
Jun 22 Python
python中import reload __import__的区别详解
Oct 16 Python
python3 pygame实现接小球游戏
May 14 Python
Python及Pycharm安装方法图文教程
Aug 05 Python
pytorch动态网络以及权重共享实例
Jan 06 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
Apr 14 Python
详解Flask前后端分离项目案例
Jul 24 Python
Python提取PDF指定内容并生成新文件
Jun 09 Python
Python pandas读取CSV文件的注意事项(适合新手)
Jun 20 Python
Python中的协程(Coroutine)操作模块(greenlet、gevent)
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中in_array函数用法探究
2014/11/25 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
北京奥运官方网站幻灯切换效果flash版打包下载
2008/01/30 Javascript
JQuery操作tr和td内容的方法实例
2013/03/06 Javascript
javascript中onclick(this)用法介绍
2013/04/19 Javascript
Js nodeType 属性全面解析
2013/11/14 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
2014/10/17 Javascript
javascript中Function类型详解
2015/04/28 Javascript
JS更改select内option属性的方法
2015/10/14 Javascript
用JS中split方法实现彩色文字背景效果实例
2016/08/24 Javascript
js仿小米官网图片轮播特效
2016/09/29 Javascript
nodejs基础应用
2017/02/03 NodeJs
Vue单页面应用保证F5强刷不清空数据的解决方案
2018/01/31 Javascript
详解Vue.directive 自定义指令
2019/03/27 Javascript
使用VUE实现在table中文字信息超过5个隐藏鼠标移到时弹窗显示全部
2019/09/16 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
JS求解两数之和算法详解
2020/04/28 Javascript
[01:12:08]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.24
2019/09/10 DOTA
[49:02]KG vs Infamous 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
2017/02/13 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
对python mayavi三维绘图的实现详解
2019/01/08 Python
Python中asyncio模块的深入讲解
2019/06/10 Python
用python打印菱形的实操方法和代码
2019/06/25 Python
HTML5标签使用方法详解
2015/11/27 HTML / CSS
伦敦平价潮流珠宝首饰品牌:Astrid & Miyu
2016/10/10 全球购物
德国高性价比网上药店:medpex
2017/07/09 全球购物
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
园长自我鉴定
2013/10/06 职场文书
毕业生在校学习的自我评价分享
2013/10/08 职场文书
学习十八大报告感言
2014/02/04 职场文书
服装采购员岗位职责
2014/03/15 职场文书
入党积极分子培养人意见
2015/06/02 职场文书
统招统分证明
2015/06/23 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python