hashlib的md5计算
hashlib的md5计算
hashlib概述
涉及加密服务:Cryptographic Services
其中 hashlib是涉及 安全散列
和 消息摘要
,提供多个不同的加密算法借口,如SHA1、SHA224、SHA256、SHA384、SHA512、MD5等。
>>> import hashlib
>>> m = hashlib.md5() #创建hash对象,md5:(message-Digest Algorithm 5)消息摘要算法,得出一个128位的密文
>>> m.update("Nobody inspects") #更新哈希对象以字符串参数
>>> m.update(" the spammish repetition") #更新哈希对象以字符串参数
>>> m.digest() #返回摘要,作为二进制数据字符串值
>>> m.hexdigest() #返回十六进制数字字符串
基本用法
hashlib.md5('hiyang').hexdigest()
'97b21efa4d5de4c1a6a2b332f1e183e5'
>>> m = hashlib.md5()
>>> m.update('hiyang')
>>> m.hexdigest()
'97b21efa4d5de4c1a6a2b332f1e183e5'
使用new指定加密算法 new(name, string='')
hashlib.new('md5','hiyang').hexdigest()
'97b21efa4d5de4c1a6a2b332f1e183e5'
h = hashlib.new('md5')
h.update('hiyang')
hashlib.md5('hiyang').hexdigest()
'97b21efa4d5de4c1a6a2b332f1e183e5'
范例
- md5sum() 计算文件的md5
- md5sumd() 计算目录下文件的md5
- md5sumd2() 计算目录下文件的md5,返回一个生成器
- md5CheckFile() 通过md5比较文件内容是否相同
#!/usr/bin/env python
# python 2
# encoding:utf8
import hashlib
import sys
import os
def md5sum(f, readsize=4096):
"""to calculate md5 of a file, readsize default is 4096 bytes
return result"""
m = hashlib.md5()
with open(f, 'rb') as fd:
data = fd.read(readsize)
while data:
m.update(data)
data = fd.read(readsize)
else:
return m.hexdigest()
def md5sumd(filename):
"""to calculate md5 of a directory
return result"""
_md5sumd = ''
for paths, dirs, files in os.walk(filename):
for f in files:
fn = os.path.join(paths, f)
_md5sumd += md5sum(fn)+' '+fn+'\n'
return _md5sumd
def md5sumd2(filename):
"""to calculate md5 of a directory
return generator"""
for paths, dirs, files in os.walk(filename):
for f in files:
fn = os.path.join(paths, f)
yield md5sum(fn)+' '+fn
def md5CheckFile(filename='.'):
"""calculate md5 of a directory, to check the same file
return a directory {md5: [filename,...]}, these file has same md5"""
dic = {}
for paths, dirs, files in os.walk(filename):
for f in files:
fn = os.path.join(paths, f)
md5 = md5sum(fn)
if dic.has_key(md5):
dic[md5].append(fn)
else:
dic[md5] = [fn]
return {k: v for k, v in dic.items() if len(v) >= 2}
if __name__ == '__main__':
try:
filename = sys.argv[1]
except IndexError:
filename = '.'
if os.path.isfile(filename):
print md5sum(filename)+' '+filename
elif os.path.isdir(filename):
_md5sumd = md5sumd(filename)
print _md5sumd,
print '-' * 20, 'total', '-' * 20
print hashlib.md5(_md5sumd).hexdigest()+' '+filename
else:
print >> sys.stderr, 'file %s is not exist.' % filename
hashlib的md5计算的更多相关文章
- Java中比较不同的MD5计算方式
在项目中经常需要使用计算文件的md5,用作一些用途,md5计算算法,通常在网络上查询时,一般给的算法是读取整个文件的字节流,然后计算文件的md5,这种方式当文件较大,且有很大并发量时,则可能导致内存打 ...
- iOS BCD码、数据流、字节和MD5计算
一.各个之间的相互转换 1.字符串转数据流NSData NSString *str = @"abc123"; NSData *dd = [str dataUsingEncoding ...
- php UTF8 转字节数组,后使用 MD5 计算摘要
Hex.encodeHexString(md5.digest);按 UTF8 转字节数组,后使用 MD5 计算摘要,得到 16 字节数组,使用 Hex 转为长度为 32 的字符串,保持小写 bin2h ...
- 模拟ssh、黏包、hashlib模块(MD5)
待补充..... 一.模拟ssh 二.黏包 1.黏包现象 让我们基于tcp先制作一个远程执行命令的程序(命令ls -l ; lllllll ; pwd) res=subprocess.Popen(cm ...
- Cocos Creator 热更新文件MD5计算和需要注意的问题
Creator的热更新使用jsb.热更新基本按照 http://docs.cocos.com/creator/manual/zh/advanced-topics/hot-update.html?h=% ...
- 【Python】使用hashlib进行MD5和sha1摘要计算
代码: import hashlib hash = hashlib.md5() hash.update('http://www.cnblogs.com/xiandedanteng'.encode('u ...
- python hashlib模块 md5加密 sha256加密 sha1加密 sha512加密 sha384加密 MD5加盐
python hashlib模块 hashlib hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, ...
- Python3学习之路~5.12 hashlib & hmac & md5 & sha模块
hashlib模块用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import md5 h ...
- hashlib模块 md5 sha1
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示) 对于同一个字符串,不管这个字符串有多长 ...
随机推荐
- OpenCV-Python 直方图-4:直方图反投影 | 二十九
目标 在本章中,我们将学习直方图反投影. 理论 这是由Michael J. Swain和Dana H. Ballard在他们的论文<通过颜色直方图索引>中提出的. 用简单的话说是什么意思? ...
- 仅用200个样本就能得到当前最佳结果:手写字符识别新模型TextCaps
由于深度学习近期取得的进展,手写字符识别任务对一些主流语言来说已然不是什么难题了.但是对于一些训练样本较少的非主流语言来说,这仍是一个挑战性问题.为此,本文提出新模型TextCaps,它每类仅用200 ...
- TCP/IP中的传输层协议TCP、UDP
TCP提供可靠的通信传输,而UDP则常用于让广播和细节控制交给应用的通信传输. 传输层协议根据IP数据报判断最终的接收端应用程序. TCP/IP的众多应用协议大多以客户端/服务端的形式运行.客户端是请 ...
- MySQL 同步复制及高可用方案总结
1.前言 mysql作为应用程序的数据存储服务,要实现mysql数据库的高可用.必然要使用的技术就是数据库的复制,如果主节点出现故障可以手动的切换应用到从节点,这点相信运维同学都是知道,并且可以实现的 ...
- vue引入echart Error in mounted hook: "ReferenceError: myChart is not defined" found in
解决办法: // 实例化echarts对象 var/let myChart = echarts.init(this.$refs.myChart)
- 1043 Is It a Binary Search Tree (25分)(树的插入)
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...
- JMeter 接口测试 自动生成签名机制
在进行接口测试时,遇到接口进行了签名校验,为实现自动生成签名,经过一点研究终于成功. 首先,需要从前端获取 签名加密包 XXXsign.jar.. 建议将该jar包放在 jmeter lib 目录 ...
- readthedocs网托管持多语言文档
希望在readthedocs上创建支持多语言的文档,效果类似: 通过语言选项,可以切到到不同的语言版本:实现这个目标包含两个主要步骤: 在本地对文档进行翻译 在readthedocs.org上配置翻译 ...
- flask from_object和from_pyfile的区别
flask from_object和from_pyfile的区别 from_object接受的是一个模块对象,需求导入 from_pyfile接受的是一个文件名的字符串,文件可以不是py文件也可以是 ...
- .NET MVC中登录过滤器拦截的两种方法
今天给大家介绍两种ASP中过滤器拦截的两种方法. 一种是EF 的HtppModule,另一种则是灵活很多针对MVC的特性类 Attribute 具体什么是特性类可以参考着篇文章:https://www ...