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计算的更多相关文章

  1. Java中比较不同的MD5计算方式

    在项目中经常需要使用计算文件的md5,用作一些用途,md5计算算法,通常在网络上查询时,一般给的算法是读取整个文件的字节流,然后计算文件的md5,这种方式当文件较大,且有很大并发量时,则可能导致内存打 ...

  2. iOS BCD码、数据流、字节和MD5计算

    一.各个之间的相互转换 1.字符串转数据流NSData NSString *str = @"abc123"; NSData *dd = [str dataUsingEncoding ...

  3. php UTF8 转字节数组,后使用 MD5 计算摘要

    Hex.encodeHexString(md5.digest);按 UTF8 转字节数组,后使用 MD5 计算摘要,得到 16 字节数组,使用 Hex 转为长度为 32 的字符串,保持小写 bin2h ...

  4. 模拟ssh、黏包、hashlib模块(MD5)

    待补充..... 一.模拟ssh 二.黏包 1.黏包现象 让我们基于tcp先制作一个远程执行命令的程序(命令ls -l ; lllllll ; pwd) res=subprocess.Popen(cm ...

  5. Cocos Creator 热更新文件MD5计算和需要注意的问题

    Creator的热更新使用jsb.热更新基本按照 http://docs.cocos.com/creator/manual/zh/advanced-topics/hot-update.html?h=% ...

  6. 【Python】使用hashlib进行MD5和sha1摘要计算

    代码: import hashlib hash = hashlib.md5() hash.update('http://www.cnblogs.com/xiandedanteng'.encode('u ...

  7. python hashlib模块 md5加密 sha256加密 sha1加密 sha512加密 sha384加密 MD5加盐

      python hashlib模块   hashlib hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, ...

  8. Python3学习之路~5.12 hashlib & hmac & md5 & sha模块

    hashlib模块用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import md5 h ...

  9. hashlib模块 md5 sha1

    Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示) 对于同一个字符串,不管这个字符串有多长 ...

随机推荐

  1. Flutter Weekly Issue 49

    插件/Librarys flutter_date_pickers Allows to use date pickers without dialog. Provides some customizab ...

  2. 面试刷题28:如何写出安全的java代码?

    对jdk,jvm,java应用程序的攻击多种多样?那么从java程序员的角度,如何写出安全的代码呢? 我是李福春,我在准备面试,今天的题目是:如何写出安全的java代码? 答:这个需要从功能设计到实现 ...

  3. Springcloud zuul 实现API 网关

    1,https://github.com/Netflix/zuul zuul 网关文档 2,什么是网关 网关就是客户端进行访问的时候,先经过网关服务器,再由网关服务器进行转发到真实的服务器.类似于Ng ...

  4. spring ioc源码简析

    ClassPathXmlApplicationContext 首先我们先从平时启动spring常用的ClassPathXmlApplicationContext开始解析 ApplicationCont ...

  5. SpringBoot使用RedisTemplate操作Redis时,key值出现 \xac\xed\x00\x05t\x00\tb

    原因分析 原因与RedisTemplate源码中的默认序列化方式有关 defaultSerializer = new JdkSerializationRedisSerializer( classLoa ...

  6. 模块 time datetime 时间获取和处理

    模块_time 和时间有关系的我们就要用到时间模块.在使用模块之前,应该首先导入这个模块. 1 延时 time.sleep(secs) (线程)推迟指定的时间运行.单位为秒. 2 获取当前时间戳tim ...

  7. 【tensorflow2.0】处理图片数据-cifar2分类

    1.准备数据 cifar2数据集为cifar10数据集的子集,只包括前两种类别airplane和automobile. 训练集有airplane和automobile图片各5000张,测试集有airp ...

  8. CSS躬行记(3)——CSS属性拾遗

    一.粘滞定位 粘滞定位(sticky)与相对定位类似,既不会脱离正常流,也不会改变元素盒类型,并且会保留原先所占的空间.它会相对于包含块偏移,它的包含块分为两种,第一种和绝对定位一样:第二种是最近的滚 ...

  9. Three中的动画实现-[three.js]

    Table Of Content 动画原理 js中动画实现原理setInterval js中动画实现新方法requestAnimationFrame 一个示例 动画原理 动画的本质实际上就是快速地不断 ...

  10. Redis 笔记(五)—— HASH 常用命令

    添加和删除键值对的散列操作 命令 用例和描述 HMGET HMGET key-name key [key ...] —— 从散列里面获取一个或多个键的值 HMSET HMSET key-name ke ...