用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 相关文章推荐
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
Dec 04 Python
简单介绍Python下自己编写web框架的一些要点
Apr 29 Python
python交互式图形编程实例(三)
Nov 17 Python
python登录并爬取淘宝信息代码示例
Dec 09 Python
Django model反向关联名称的方法
Dec 15 Python
实例详解Python装饰器与闭包
Jul 29 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
Aug 17 Python
pytorch数据预处理错误的解决
Feb 20 Python
python实现扫雷小游戏
Apr 24 Python
Win10环境中如何实现python2和python3并存
Jul 20 Python
python学习之使用Matplotlib画实时的动态折线图的示例代码
Feb 25 Python
PYTHON 使用 Pandas 删除某列指定值所在的行
Apr 28 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 cli换行示例
2014/04/22 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
PHP查找一列有序数组是否包含某值的方法
2020/02/07 PHP
JavaScript 学习笔记(六)
2009/12/31 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
前端必备神器 Snap.svg 弹动效果
2014/11/10 Javascript
js网页滚动条滚动事件实例分析
2015/05/05 Javascript
简介JavaScript中Math.cos()余弦方法的使用
2015/06/15 Javascript
详解Bootstrap插件
2016/04/25 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
jQuery文件上传控件 Uploadify 详解
2016/06/20 Javascript
JavaScript基于原型链的继承
2016/06/22 Javascript
js判断空对象的实例(超简单)
2016/07/26 Javascript
js制作可以延时消失的菜单
2017/01/13 Javascript
bootstrap实现的自适应页面简单应用示例
2017/03/09 Javascript
vuex学习之Actions的用法详解
2017/08/29 Javascript
使用cookie绕过验证码登录的实现代码
2017/10/12 Javascript
Angular5.1新功能分享
2017/12/21 Javascript
vue实现压缩图片预览并上传功能(promise封装)
2019/01/10 Javascript
JavaScript实现英语单词题库
2019/12/24 Javascript
extjs4图表绘制之折线图实现方法分析
2020/03/06 Javascript
Python字符串处理之count()方法的使用
2015/05/18 Python
Python实现七彩蟒蛇绘制实例代码
2018/01/16 Python
pygame游戏之旅 添加游戏暂停功能
2018/11/21 Python
python中sympy库求常微分方程的用法
2020/04/28 Python
解决在keras中使用model.save()函数保存模型失败的问题
2020/05/21 Python
日本最大化妆品和美容产品的综合口碑网站:cosme shopping
2019/08/28 全球购物
数控机械专业个人的自我评价
2014/01/02 职场文书
机关驾驶员违规检讨书
2014/09/13 职场文书
王兆力在市委党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
2015年会计年终工作总结
2015/05/26 职场文书
2019年公司卫生管理制度样本
2019/08/21 职场文书
Go语言带缓冲的通道实现
2021/04/26 Golang
手把手教你使用TensorFlow2实现RNN
2021/07/15 Python
vue3种table表格选项个数的控制方法
2022/04/14 Vue.js