用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 del()函数用法
Mar 24 Python
Python生成pdf文件的方法
Aug 04 Python
python简单获取本机计算机名和IP地址的方法
Jun 03 Python
Python判断Abundant Number的方法
Jun 15 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
Apr 30 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
May 24 Python
python dataframe向下向上填充,fillna和ffill的方法
Nov 28 Python
Python3 单行多行万能正则匹配方法
Jan 07 Python
Python简单I/O操作示例
Mar 18 Python
基于python实现操作git过程代码解析
Jul 27 Python
python的setattr函数实例用法
Dec 16 Python
PyTorch中permute的使用方法
Apr 26 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
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
2013/02/06 PHP
php 常用算法和时间复杂度
2013/07/01 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
2015/11/23 PHP
JavaScript在IE中“意外地调用了方法或属性访问”
2008/11/19 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2013/10/24 Javascript
深入理解javascript中return的作用
2013/12/30 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
动态加载js、css的简单实现代码
2016/05/26 Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
2016/09/04 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
select自定义小三角样式代码(实用总结)
2017/08/18 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
Vue实现商品分类菜单数量提示功能
2019/07/26 Javascript
jquery实现聊天机器人
2020/02/08 jQuery
javascript实现前端input密码输入强度验证
2020/06/24 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
[39:53]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.19
2020/11/19 DOTA
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
Python的迭代器和生成器使用实例
2015/01/14 Python
对Python3.x版本print函数左右对齐详解
2018/12/22 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
Python安装OpenCV的示例代码
2020/03/05 Python
Timberland美国官网:全球领先的户外品牌
2016/08/15 全球购物
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
和平主题的演讲稿
2014/01/12 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
工人先锋号事迹材料
2014/12/24 职场文书
本科毕业论文致谢词
2015/05/14 职场文书
2015年环保局工作总结
2015/05/22 职场文书
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS
索尼ICF-36收音机评测
2022/04/30 无线电