用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中SocketServer模块处理网络请求的用法
Jun 28 Python
深入解析Python的Tornado框架中内置的模板引擎
Jul 11 Python
Python中字符串的常见操作技巧总结
Jul 28 Python
基于Python闭包及其作用域详解
Aug 28 Python
Python+request+unittest实现接口测试框架集成实例
Mar 16 Python
python3中函数参数的四种简单用法
Jul 09 Python
python之array赋值技巧分享
Nov 28 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
May 27 Python
Python Flask异步发送邮件实现方法解析
Aug 01 Python
如何使用 Flask 做一个评论系统
Nov 27 Python
python实现无边框进度条的实例代码
Dec 30 Python
python使用openpyxl库读写Excel表格的方法(增删改查操作)
May 02 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概述.
2006/10/09 PHP
php计算两个日期时间差(返回年、月、日)
2014/06/19 PHP
php实现将字符串按照指定距离进行分割的方法
2015/03/14 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
Yii安装与使用Excel扩展的方法
2016/07/13 PHP
PHP中list方法用法示例
2016/12/01 PHP
php实现的中文分词类完整实例
2017/02/06 PHP
在Laravel中使用DataTables插件的方法
2018/05/29 PHP
php json转换相关知识(小结)
2018/12/21 PHP
PHP 8新特性简介
2020/08/18 PHP
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
js使用for循环及if语句判断多个一样的name
2014/09/09 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
this在vue和小程序中的使用详解
2019/01/28 Javascript
node.js域名解析实现方法详解
2019/11/05 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
2020/03/02 Javascript
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
python反编译学习之字节码详解
2019/05/19 Python
python中树与树的表示知识点总结
2019/09/14 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
2020/04/26 Python
Python Scrapy图片爬取原理及代码实例
2020/06/12 Python
使用python脚本自动生成K8S-YAML的方法示例
2020/07/12 Python
New Balance英国官方网站:始于1906年,百年慢跑品牌
2016/12/07 全球购物
Ray-Ban雷朋太阳眼镜英国官网:Ray-Ban UK
2019/11/23 全球购物
奥地利时尚、美容、玩具和家居之家:Kastner & Öhler
2020/04/26 全球购物
函数指针的定义是什么
2016/08/14 面试题
装潢设计实习自我鉴定
2013/09/19 职场文书
高中军训感言1000字
2014/03/01 职场文书
幼儿园小班植树节活动方案
2014/03/04 职场文书
2019毕业论文致谢词
2019/06/24 职场文书