用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中的多线程实例教程
Aug 27 Python
Python最长公共子串算法实例
Mar 07 Python
Python使用tablib生成excel文件的简单实现方法
Mar 16 Python
python 类详解及简单实例
Mar 24 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
Jul 22 Python
django数据关系一对多、多对多模型、自关联的建立
Jul 24 Python
django基于restframework的CBV封装详解
Aug 08 Python
Python手绘可视化工具cutecharts使用实例
Dec 05 Python
python实现批量处理将图片粘贴到另一张图片上并保存
Dec 12 Python
拿来就用!Python批量合并PDF的示例代码
Aug 10 Python
Pytorch数据读取之Dataset和DataLoader知识总结
May 23 Python
Python matplotlib 利用随机函数生成变化图形
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
在php中判断一个请求是ajax请求还是普通请求的方法
2011/06/28 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
jQuery把表单元素变为json对象
2013/11/06 Javascript
js实现延迟加载的方法
2015/06/24 Javascript
javascript省市级联功能实现方法实例详解
2015/10/20 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
2016/10/17 Javascript
JavaScript之RegExp_动力节点Java学院整理
2017/06/29 Javascript
基于easyui checkbox 的一些操作处理方法
2017/07/10 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
VUE预渲染及遇到的坑
2018/09/03 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
Python实现的计数排序算法示例
2017/11/29 Python
Python判断一个三位数是否为水仙花数的示例
2018/11/13 Python
解决项目pycharm能运行,在终端却无法运行的问题
2019/01/19 Python
对python3 sort sorted 函数的应用详解
2019/06/27 Python
Win10里python3创建虚拟环境的步骤
2020/01/31 Python
Python计算矩阵的和积的实例详解
2020/09/10 Python
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
Wojas罗马尼亚网站:波兰皮鞋品牌
2018/11/01 全球购物
JENNIFER BEHR官网:各种耳环和发饰
2020/06/07 全球购物
如何进行Linux分区优化
2016/09/13 面试题
客服专员岗位职责范本
2013/11/29 职场文书
新护士岗前培训制度
2014/02/02 职场文书
疾病捐款倡议书
2014/05/13 职场文书
教师党员学习群众路线心得体会
2014/11/04 职场文书
先进单位事迹材料
2014/12/25 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书
青年联谊会致辞
2015/07/31 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书
《童年》读后感(三篇)
2019/08/27 职场文书
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android