用python计算文件的MD5值
md5是一种常见不可逆加密算法,使用简单,计算速度快,在很多场景下都会用到,比如:给用户上传的文件命名,数据库中保存的用户密码,下载文件后检验文件是否正确等。下面讲解在python中如何使用md5算法。
一、计算字符串的md5值
#!/usr/bin/envpython #-*-coding:utf-8-*- importsys importhashlib 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是否正确。
二、计算文件的md5值
#!/usr/bin/envpython #-*-coding:utf-8-*- importsys importhashlib reload(sys) sys.setdefaultencoding('utf-8') if__name__=='__main__': file_name="3383430480_51_01.jpg" withopen(file_name,'rb')asfp: data=fp.read() file_md5=hashlib.md5(data).hexdigest() print(file_md5)#ac3ee699961c58ef80a78c2434efe0d0文件md5计算跟字符串计算是一样,直接使用hashlib的md5方法,然后hexdigests就好了。同样用PHP代码验证下
从结果可以看出md5是一样的,文件md5值也不过如此呀,心里窃喜。。。
如果大文件呢,比如几个G呢,上述代码肯定会内存溢出,怎么办呢,可以分块读取文件内容并计算。
三、计算大文件的md5值
#!/usr/bin/envpython #-*-coding:utf-8-*- importsys importhashlib defget_file_md5(fname): m=hashlib.md5()#创建md5对象 withopen(fname,'rb')asfobj: whileTrue: data=fobj.read(4096) ifnotdata: break m.update(data)#更新md5对象 returnm.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/envpython #-*-coding:utf-8-*- importhashlib defget_file_md5(file_name): """ 计算文件的md5 :paramfile_name: :return: """ m=hashlib.md5()#创建md5对象 withopen(file_name,'rb')asfobj: whileTrue: data=fobj.read(4096) ifnotdata: break m.update(data)#更新md5对象 returnm.hexdigest()#返回md5对象 defget_str_md5(content): """ 计算字符串md5 :paramcontent: :return: """ m=hashlib.md5(content)#创建md5对象 returnm.hexdigest()好了,关于md5的计算就到这里,有不同见解的同学,欢迎拍砖,一起来探讨,谢谢。
以上就是用python计算文件的MD5值的详细内容,更多关于python计算文件MD5的资料请关注毛票票其它相关文章!