用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通过urllib2爬网页上种子下载示例
Feb 24 Python
python实现随机密码字典生成器示例
Apr 09 Python
Python中使用摄像头实现简单的延时摄影技术
Mar 27 Python
完美解决安装完tensorflow后pip无法使用的问题
Jun 11 Python
Python实现判断一个整数是否为回文数算法示例
Mar 02 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
Jun 11 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
Oct 11 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
Apr 15 Python
Python3将ipa包中的文件按大小排序
Apr 17 Python
python openCV实现摄像头获取人脸图片
Aug 20 Python
Python实现石头剪刀布游戏
Jan 20 Python
Python图像处理库PIL详细使用说明
Apr 06 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通过curl模拟登陆DZ论坛
2015/05/11 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
2019/04/02 PHP
jquery 批量上传图片实现代码
2010/01/28 Javascript
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
2010/11/09 Javascript
多种方法实现JS动态添加事件
2013/11/01 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
Bootstrap每天必学之按钮(Button)插件
2016/04/25 Javascript
Vue组件实例间的直接访问实现代码
2017/08/20 Javascript
Javascript 严格模式use strict详解
2017/09/16 Javascript
解析vue中的$mount
2017/12/21 Javascript
基于vue-element组件实现音乐播放器功能
2018/05/06 Javascript
4个顶级JavaScript高级文本编辑器
2018/10/10 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
微信小程序实现的图片保存功能示例
2019/04/24 Javascript
javascript实现简单打字游戏
2019/10/29 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
实例分析javascript中的异步
2020/06/02 Javascript
深入解读VUE中的异步渲染的实现
2020/06/19 Javascript
在Python中使用zlib模块进行数据压缩的教程
2015/06/26 Python
在Python文件中指定Python解释器的方法
2019/02/18 Python
超简单使用Python换脸实例
2019/03/27 Python
基于树莓派的语音对话机器人
2019/06/17 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
Python标准库json模块和pickle模块使用详解
2020/03/10 Python
Pytorch1.5.1版本安装的方法步骤
2020/12/31 Python
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
Tirendo比利时:在线购买轮胎
2018/10/22 全球购物
精美的手工家居和生活用品:Nkuku
2019/11/01 全球购物
英文自荐信
2013/12/19 职场文书
关于工资低的辞职信
2014/01/14 职场文书
食品行业求职人的自我评价
2014/01/19 职场文书
法定代表人授权委托书范文
2014/08/02 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
交通安全温馨提示语
2015/07/14 职场文书
《半截蜡烛》教学反思
2016/02/19 职场文书
如何用python绘制雷达图
2021/04/24 Python