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进制的字符串表示) 对于同一个字符串,不管这个字符串有多长 ...
随机推荐
- TensorFlow系列专题(十一):RNN的应用及注意力模型
磐创智能-专注机器学习深度学习的教程网站 http://panchuang.net/ 磐创AI-智能客服,聊天机器人,推荐系统 http://panchuangai.com/ 目录: 循环神经网络的应 ...
- 第二章 Getting started with functional programming
Getting started with functional programming 开始函数式编程 higher-order functions-高阶函数 所有FP语言的主要特点是函数可以像普通值 ...
- 详细解析kafka之 kafka消费者组与重平衡机制
消费组组(Consumer group)可以说是kafka很有亮点的一个设计.传统的消息引擎处理模型主要有两种,队列模型,和发布-订阅模型. 队列模型:早期消息处理引擎就是按照队列模型设计的,所谓队列 ...
- 使用IDEA编写JDBC
省去下载MySQL的过程,创建数据库demo 首先在下载的Java服务中将此jar包复制到项目中的一个空文件夹中 在当前工程下新建目录lib(名字可自定) 找到MySQL的Java服务的jar包 打开 ...
- 《Three.js 入门指南》3.1.2 - 一份整齐的代码结构以及使用ORBIT CONTROLS插件(轨道控制)实现模型控制
3.1.2 正式代码结构 & ORBIT CONTROLS插件(轨道控制) 说明 本节内容属于插入节,<Three.js入门指南>这本书中,只是简单的介绍了一些概念,是一本基础的入 ...
- 1054 The Dominant Color (20分)(水)
Behind the scenes in the computer's memory, color is always talked about as a series of 24 bits of i ...
- Oracle 数据库创建导入
Oracle 数据库创建导入 由 Alma 创建, 最后一次修改 2018-06-04 14:37:50 在本章教程中,将教大家如何在Oracle 中创建导入数据库. 注意:本教程中的有些命令您可能并 ...
- 数据挖掘入门系列教程(八点五)之SVM介绍以及从零开始推导公式
目录 SVM介绍 线性分类 间隔 最大间隔分类器 拉格朗日乘子法(Lagrange multipliers) 拉格朗日乘子法推导 KKT条件(Karush-Kuhn-Tucker Conditions ...
- TC1.6SourceCode java课程表
/** * @version 2.0 * @author sharks */ /** * Instruction * this version will use IO * apply file to ...
- Eclipse(Eclipse for android)代码自动提示设置
java代码和xml资源代码在有的eclipse中可以自己提示,但有的并不支持这个功能,还得我们人为去调整,主要原因是因为你们下载的elipse的渠道不同,获得的版本有的官方原版,有的是个人备份版等等 ...