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进制的字符串表示) 对于同一个字符串,不管这个字符串有多长 ...
随机推荐
- POJ-3134-Power Calculus(迭代加深)
题意:输入一个n,问x从1次方开始,到n次方 ,可以乘或除已经计算出来的数 ,最少需要执行多少步? 思路:迭代加深 ,深度从0开始 ,直到返回值为真. 在深搜过程中剪枝(深度的判断 ,当前最大值尽全力 ...
- 150+行Python代码实现带界面的数独游戏
150行代码实现图形化数独游戏 Github地址,欢迎各位大佬们fork.star啥的,感谢: 今天闲着没事干,以前做过html+js版的数独,这次做个python版本的,界面由pygame完成,数独 ...
- 解析PE文件
最近在自学解析PE文件,根据小辣椒(CFF Explorer)以及各论坛上大佬的帖子,做了个黑屏打印PE文件的,历时7天完成,在此想跟有相关需要的同学们分享下思路,有不足之处也希望大家不吝赐教,指点出 ...
- JAVA研发面试题
转自:http://www.jianshu.com/p/1f1d3193d9e3 Java基础的知识点推荐<Java编程思想>,JVM的推荐<深入理解Java虚拟机>,Spri ...
- Openresty+Lua+Kafka实现日志实时采集
简介 在很多数据采集场景下,Flume作为一个高性能采集日志的工具,相信大家都知道它.许多人想起Flume这个组件能联想到的大多数都是Flume跟Kafka相结合进行日志的采集,这种方案有很多他的优点 ...
- javascript中的符号 == 和 === 的区别
== 表示相等 即仅仅比较两边变量的数值是否相等. 相等运算符隐藏的类型转换,会带来一些违反直觉的结果. 这就是为什么建议尽量不要使用相等运算符. 至于使用相等运算符会不会对后续代码造成意外影响,答 ...
- 对oracle里面clob字段里面xml的增删改查学习
这段时间,我使用系统表里面有clob字段里面存放的xml信息,我们如何对xml进行增删改查操作呢,自己参考了很多也学到很多,给大家分享一下 首先我们先建测试表 CREATE TABLE EFGP_23 ...
- Python函数之面向过程编程
一.解释 面向过程:核心是过程二字,过程即解决问题的步骤,基于面向过程去设计程序就像是在设计,流水线式的编程思想,在设计程序时,需要把整个流程设计出来, 一条工业流水线,是一种机械式的思维方式 二.优 ...
- Spark Streaming 编程入门指南
Spark Streaming 是核心Spark API的扩展,可实现实时数据流的可伸缩,高吞吐量,容错流处理.可以从许多数据源(例如Kafka,Flume,Kinesis或TCP sockets)中 ...
- laravel使用创建的request作为表单验证类
1.使用命令行工具创建request php artisan make request:validateLoginRequest 2.创建后进入app/Http/Requests目录下找到创建的文件 ...