用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二维码生成库qrcode安装和使用示例
Dec 16 Python
Python可跨平台实现获取按键的方法
Mar 05 Python
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
May 20 Python
python简单获取数组元素个数的方法
Jul 13 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
Jul 13 Python
详解Python 模拟实现生产者消费者模式的实例
Aug 10 Python
python django框架中使用FastDFS分布式文件系统的安装方法
Jun 10 Python
Python使用贪婪算法解决问题
Oct 22 Python
Pytorch训练过程出现nan的解决方式
Jan 02 Python
使用Python构造hive insert语句说明
Jun 06 Python
使用pycharm和pylint检查python代码规范操作
Jun 09 Python
Python的Tqdm模块实现进度条配置
Feb 24 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
ubuntu下编译安装xcache for php5.3 的具体操作步骤
2013/06/18 PHP
php连接Access数据库错误及解决方法
2013/06/20 PHP
php实现word转html的方法
2016/01/22 PHP
微信支付扫码支付php版
2016/07/22 PHP
PHP的mysqli_ssl_set()函数讲解
2019/01/23 PHP
学习javascript,实现插入排序实现代码
2011/07/31 Javascript
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
js如何获取object类型里的键值
2014/02/18 Javascript
浅析Node在构建超媒体API中的作用
2014/07/30 Javascript
javascript中setTimeout和setInterval的unref()和ref()用法示例
2014/11/26 Javascript
Jquery中Event对象属性小结
2015/02/27 Javascript
jquery实现平滑的二级下拉菜单效果
2015/08/26 Javascript
Bootstrap精简教程
2015/11/27 Javascript
Javascript获取统一管理的提示语(message)
2016/02/03 Javascript
js表单序列化判断空值的实例
2017/09/22 Javascript
node实现登录图片验证码的示例代码
2018/04/20 Javascript
浅谈JS对象添加getter与setter的5种方法
2018/06/09 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
js面向对象之实现淘宝放大镜
2020/01/15 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
vue项目中微信登录的实现操作
2020/09/08 Javascript
python字典排序实例详解
2015/05/20 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
python中解析json格式文件的方法示例
2017/05/03 Python
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
python批量修改图片后缀的方法(png到jpg)
2018/10/25 Python
python re库的正则表达式入门学习教程
2019/03/08 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
在阿尔卑斯山或希腊度过快乐假期:Alpine Elements
2019/12/28 全球购物
小学三八妇女节活动方案
2014/03/16 职场文书
连带责任保证书
2014/04/29 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript
详解pytorch创建tensor函数
2022/03/22 Python