python计算文件md5值

  md5是一种常见不可逆加密算法,使用简单,计算速度快,在很多场景下都会用到,比如:给用户上传的文件命名,数据库中保存的用户密码,下载文件后检验文件是否正确等。下面讲解在python中如何使用md5算法。

 

一、计算字符串的md5值

#!/usr/bin/env python
# -*- coding: utf-8 -*-import sys
import hashlibreload(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

可见python下计算字符串的md5也是非常方便,使用hashlib库即可。网上有文章介绍python2.x下可以使用md5库,该库在python3.x不能使用,因此不推荐使用该库。

 

字符串的md5计算比较简单,下面看下如何计算文件的md5值。

二、计算文件的md5值

#!/usr/bin/env python
# -*- coding: utf-8 -*-import sys
import hashlibreload(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 hashlibdef get_file_md5(fname):m = hashlib.md5()   #创建md5对象with open(fname,'rb') as fobj:while True:data = fobj.read(4096)if not data:breakm.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

分块读取文件内容,然后调用hashlib的update()方法将分块数据更新至md5对象中,最后调用hexdigest()方法得出md5值。

 

四、封装成常用库md5.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-import hashlibdef 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:breakm.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的计算就到这里,有不同见解的同学,欢迎拍砖,一起来探讨,谢谢。

 

转载于:https://www.cnblogs.com/xiaodekaixin/p/11203857.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件打开特别慢_“Origin进不去、下载慢”的解决办法合集

玩儿烂橘子的游戏&#xff0c;喜闻乐见会见到下面这句话&#xff1a;呃&#xff0c;发生了些意料之外的事情。其实&#xff0c;这还挺意料之中的。▌进不去方法①&#xff1a;挂加速器。加速器挂Steam或者Origin大厅一般是免费的&#xff0c;没效果就换一个节点、模式、加速器。…

关于使用CPU缓存的一个小栗子

一、背景知识 CPU缓存&#xff08;Cache Memory&#xff09;&#xff0c;是位于CPU与内存之间的临时存储器&#xff0c;它的容量比内存小的多但是交换速度却比内存要快得多。高速缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾&#xff0c;因为CPU运算速度要比…

输入快捷键显示未知命令_「干货」华为VRP基础和常用命令了解一下

华为VRP系统的理解手机里面是安卓系统&#xff0c;电脑里面windows系统在我们路由器、交换机、防护墙等网络设备中他们当中的系统就是VRP系统(通用路由平台)可以理解为华为的类型交换机&#xff0c;华为类型路由器以及防火墙他们之间的命令行几乎都是一样华为设备提供丰富的功能…

【第59题】【062题库】2019年OCP认证062考试新题

59题、choose three Which three statements are true about naming methods? A) In the Easy Connect method, clients can connect to a database server by using the host name of the database with an optional port and service name. B) The local naming method does…

jq获取页面高度_JQ获取窗口文档等等高度总结!

$(document).ready(function(){alert($(window).height()); //浏览器时下窗口可视区域高度alert($(document).height()); //浏览器时下窗口文档的高度alert($(document.body).height());//浏览器时下窗口文档body的高度alert($(document.body).outerHeight(true));//浏览器时下…

【第60题】【062题库】2019年OCP认证062考试新题

60题、choose one When does a database checkpoint occur? A) When there is an online redo log switch. B) When the SHUTDOWN ABORT command is issued. C) When a user session terminates abnormally. D) When a server process terminates abnorthally. Answer&#xf…

2 字符串求交集_PostGIS教程十八:维数扩展的9交集模型

一、什么是维数扩展的9交集模型"维数扩展的9交集模型-Dimensionally Extended 9-Intersection Model"&#xff08;DE9IM&#xff09;是一个用于建模两个空间对象如何交互的框架。首先&#xff0c;每个空间对象都具有&#xff1a;内部&#xff08;interior)边界&#…

房子里的K2 BPM业务流程管理

房…子这件事上&#xff0c;尴尬实在太多。 ಥ_ಥ 职场新人&#xff0c;租房很尴尬&#xff1b; 未婚男女&#xff0c;婚房很尴尬&#xff1b; 有下一代的&#xff0c;学区房很尴尬&#xff1b; 耄耋之年&#xff0c;养老房很尴尬... ▽ 甭管买房、租房、装修、设计&#xff0c…

大学生体测成绩判断c语言_体育改革瞄准高校,体测不过关可能真的毕不了业了...

「ECO氪体」体育圈人www.ecosports.cn文/ 圈哥回忆上学期间&#xff0c;体育最令你头疼的时刻是什么&#xff1f;是不是在体育中考将要到来之前&#xff0c;还没日没夜枯燥的训练和近乎苛刻的饮食控制&#xff1f;而现在&#xff0c;体育似乎不想再局限于中学了。图片截自&…

delphi 基础之三 文件流操作

文件流操作 Delphi操作流文件:什么是流&#xff1f;流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的,而不用关心流的另一头数据的真正流向。流不但可以处理文件,还可以…

mongodb 存储过程 遍历表数据_mongodb推荐存列表字段还是多条记录?

在 sql 下, 方案2更好. 在 mongo 下, 方案1更好.不知道你的这个项目中有没有用户权限组的概念.如果有权限组的话, 就是一个权限组的 collection 里面, 每个权限下保存了一个菜单项的数组.如果没有权限组的话, 就可以按照你说的方案1, 在每个用户表里, 或者单独的用户权限表里, …

学习小记----分层图最短路

前置知识 简单的图论知识 简单的&#xff44;&#xff50;知识 使用标志 你机智的发现了这是一道图论题,并且出现了类似于N次免费/花费变化的字样,大部分就是分层图最短路了. 它不是不是很难&#xff0c;就是那种&#xff0c;那种看起来很凶神恶煞的&#xff0c;你知道么&#…

gojs 节点右键点击事件_SWMM快速建模方法(3)—建立管线上下游节点编号

在SWMM中&#xff0c;管线需要输入上下游节点检查井编号&#xff0c;那么在GIS中可否实现自动获取上下游节点编号呢&#xff1f;思路是这样的&#xff0c;首先获得管线两端节点&#xff0c;然后对端点进行融合&#xff0c;删除重复的节点&#xff0c;最后根据坐标关系分别建立管…

android 设置setmultichoiceitems设置初始化勾选_Linux内核启动:虚拟盘空间设置和内存管理结构初始化...

1. 设置虚拟盘并初始化接下来main函数将对外设中的虚拟盘区进行设置。 检查makefile文件中"虚拟盘使用标志"是否设置&#xff0c; 以此确定系统是否使用了虚拟盘(假设有虚拟盘&#xff0c;大小设置为2 MB)。 操作系统从缓冲区的末端起开辟2MB内存空间设置为虚拟盘&am…

centos7 Failed to start iptables.service: Unit not found

在CentOS 7或RHEL 7或Fedora中防火墙由firewalld来管理 添加 firewall-cmd --zonepublic --add-port80/tcp --permanent &#xff08;--permanent永久生效&#xff0c;没有此参数重启后失效&#xff09;firewall-cmd --zonepublic --add-port1000-2000/tcp --permanent 重新载…

关闭mysql服务的方法有哪些_MySQL--启动和关闭MySQL服务

介绍了启动服务器的两种方式&#xff0c;以及可能遇到的问题第一种&#xff1a;系统服务1)可以通过右击方式一步步找到服务右击计算机->选择管理->找到服务&#xff0c;然后双击打开&#xff0c;找到mysql&#xff0c;我安装的是mysql8.0所以服务的名称显示是mysql80&…

[浪风分享]很简单的查看电脑所支持的最大内存的方法--磨刀不误砍柴工

硬件操作系统&#xff1d;&#xff1d;&#xff1d;&#xff1d;决定支持的最大内存  在开始&#xff0d;&#xff0d;&#xff0d;运行处输入cmd&#xff08;或者按住winkdyR键输入&#xff23;&#xff2d;&#xff24;&#xff09;&#xff0c;打开命令窗口&#xff0c;输…

mysql mysar_使用mysar分析squid日志(日志存mysql)

需要的包&#xff1a;php5-mysql #安装后php才能联系数据库php5-commonphp5-cli #执行php脚本需要mysql-server开始安装:下载最新的mysar包tar zxvf mysar-2.0.6.tar.gz -C /usr/local-#将mysar解压到/usr/local下ln -s /usr/local/mysar/etc/mysar.apache /etc/apache2/…

mysql语句怎么记_Mysql常用语句(记一下,免得忘)

1、去掉某列记录中的特殊字符例如&#xff1a;/r&#xff0c;update test_table set keyreplace(key, char(13), );其他特殊字符类似。2、查询重复的记录Select weixinid From dianxin_highda_detail Group By weixinid Having Count(*)>1;3、从txt向数据库导入记录load dat…

ZSH终端 乱码问题

参考链接 CSDN 转载于:https://www.cnblogs.com/eat-too-much/p/11216073.html