用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 11 Python
Python实现Mysql数据库连接池实例详解
Apr 11 Python
python抓取搜狗微信公众号文章
Apr 01 Python
python制作填词游戏步骤详解
May 05 Python
Python使用tkinter模块实现推箱子游戏
Oct 08 Python
python模拟实现斗地主发牌
Jan 07 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
May 23 Python
pandas之分组groupby()的使用整理与总结
Jun 18 Python
浅析Python 抽象工厂模式的优缺点
Jul 13 Python
Python函数调用追踪实现代码
Nov 27 Python
完美解决Pycharm中matplotlib画图中文乱码问题
Jan 11 Python
Pytest之测试命名规则的使用
Apr 16 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 FLEA中二叉树数组的遍历输出
2012/09/26 PHP
php用header函数实现301跳转代码实例
2013/11/25 PHP
php通过字符串调用函数示例
2014/03/02 PHP
php删除数组中重复元素的方法
2015/12/22 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
2007/02/09 Javascript
JavaScript 学习笔记(十一)
2010/01/19 Javascript
jquery中防刷IP流量软件影响统计的一点对策
2011/07/10 Javascript
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
2014/10/30 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
2015/06/23 Javascript
jQuery操作动态生成的内容的方法
2016/05/28 Javascript
深入理解JS函数的参数(arguments)的使用
2016/05/28 Javascript
JavaScript操作表单实例讲解(上)
2016/06/20 Javascript
js自定义QQ菜单效果
2017/01/10 Javascript
微信小程序 共用变量值的实现
2017/07/12 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
微信小程序wxs实现吸顶效果
2020/01/08 Javascript
python模拟登陆Tom邮箱示例分享
2014/01/13 Python
Python黑魔法@property装饰器的使用技巧解析
2016/06/16 Python
使用Python+Splinter自动刷新抢12306火车票
2018/01/03 Python
python+django+rest框架配置创建方法
2019/08/31 Python
Python GUI自动化实现绕过验证码登录
2020/01/10 Python
Python使用进程Process模块管理资源
2020/03/05 Python
python如何导入依赖包
2020/07/13 Python
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
迪卡侬比利时官网:Decathlon比利时
2019/12/28 全球购物
印刷技术专业自荐信
2014/09/18 职场文书
公司财务经理岗位职责
2015/04/08 职场文书
招商银行收入证明
2015/06/17 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android
SpringCloud项目如何解决log4j2漏洞
2022/04/10 Java/Android