【Python】 hash值计算 hashlib & hmac
hashlib & hmac
*不是很清楚能不能把这种hash值取样算法称之为加密,但是似乎好像也是这么说的哈(非科班出身的野路子就是没这种基本知识的)
■ 基本用法
hashlib支持MD5,sha1等多种加密算法,详见hashlib.algorithms_available
用法十分简单:
m = hashlib.md5() #或者是其他算法的名字,如hashlib.sha1()
m.update("Some String") #加密用update方法,注意这个方法不会返回任何值,而是把加密解密操作封装在了m这个对象里面 print m.hexdigest() #一般查看加密后的密文用hexdigest方法
*关于update方法,还有一点要说。update("a")之后再update("b")并不是说把原先a的部分都抹掉再“更新”成b(which是update这个词本身的意思吧。。),而是相当于从最开始就update("ab")了。
hmac模块用法基本同上,但是在创建加密对象的时候需要传递一个key进去:
m = hmac.new("myownkey") #默认的加密算法是md5,如果需要用其他的算法,可以用digestmod参数,令其digestmod=hashlib.sha1
m.update("Some String")
m.hexdigest() #显示加密后的密文
*m也可调用m.digest()方法,得到的是密文的“字符串形式二进制数据”。而上面提到的hexdigest方法只不过是把digest方法得到的密文通过hex编码生成了结果。相当于:
m.digest().encode("hex") 就是得到的 m.hexdigest()
同hex类似的另一种编码方式便是base64了。即m.digest().encode("base64")可以生成以base64格式编码的内容了?
**虽然同为编码方式,hex以及base64和之前我熟悉的utf-8,gbk,ascii这些编码不是一个概念。
utf-8,ascii这些编码主要用于将二进制数据和中文等自然语言的互相转换制定了一个标准
base64,hex这些则是制定了二进制数据和可以拿来进行网络传输的数据之间的互相转换的标准(比如把图片的二进制数据通过base64编码成一个字符串,这样看到这个字符串的人是不知道原来的图片是长什么样子的) //这个只是我个人YY出来的,下次有时间了仔细再去看一下详细解释,留个疑问吧
***話が変わるけど,这个hash值取出来之后应该首先是一串二进制数据对吧?然后再把这个数据通过某种编码方式编码之后,就是digest的产物了。也就是所谓的“字符串形式的二进制数据”。然后把这个字符串再通过hex或者base64的编码规则映射一下得到的就是最终的数据了。可以参考以下代码:
m = hashlib.md5()
m.update("Some String")
print type(m.digest())
print [m.digest()] #这里用列表而不是直接print是因为,print的话肯定会以某种默认的编码(或utf,或gbk,跟python shell的环境有关)显示出来,这样会乱码= =\
而列表在print的时候可以直接显示内存中的内容。
print m.digest().encode("hex")
print m.digest().encode("base64") ################输出################
<type 'str'>
['\x83\xbe\xb8\xc4\xfaE\x96\xc8\xf7\xb5e\xd3\x90\xf4\x94\xe2']
83beb8c4fa4596c8f7b565d390f494e2
g764xPpFlsj3tWXTkPSU4g==
■ 关于linux的md5sum命令和python的hashlib
偶尔发现md5sum读取文件的MD5哈希值和通过python的hashlib算出来的不一致。这主要是换行符的锅。或者说,在windows上进行python的hashlib读取文件哈希值算出来的和在linux上算出来的不一样的。解决的办法就是在windows上使用update之前,保证被读入md5对象的值是通过rb模式打开文件读取到的内容:
import hashlib
m = md5()
with open('testfile','rb') as f:
content = f.read()
m.update(content)
print m.hexdigest()
【Python】 hash值计算 hashlib & hmac的更多相关文章
- Python中模块之hashlib&hmac的讲解
hashlib & hmac的讲解 两个模块主要用于加密相关的操作. 1. hashlib模块 md5 具体代码如下 import hashlib ha_m5 = hashlib.md5()# ...
- python全栈开发-hashlib模块(数据加密)、suprocess模块、xml模块
一.hashlib模块 1.什么叫hash:hash是一种算法(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 ...
- bt 介绍以及 bt 种子的hash值(特征值)计算
bt种子的hansh值计算,近期忽然对bt种子感兴趣了(原因勿问) 1. bt种子(概念) bt 是一个分布式文件分发协议,每一个文件下载者在下载的同一时候向其他下载者不断的上传已经下载的数据,这样保 ...
- python 通过文件路径获取文件hash值
import hashlib import os,sys def CalcSha1(filepath): with open(filepath,'rb') as f: sha1obj = hashli ...
- Python——常用模块(time/datetime, random, os, shutil, json/pickcle, collections, hashlib/hmac, contextlib)
1.time/datetime 这两个模块是与时间相关的模块,Python中通常用三种方式表示时间: #时间戳(timestamp):表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. ...
- python hash 哈希值
自增知识点 1,哈希 什么是可哈希(hashable)? 简要的说可哈希的数据类型,即不可变的数据结构(字符串str.元组tuple.对象集objects). 哈希有啥作用? 它是一个将大体量数据转化 ...
- JAVA-读取文件部分内容计算HASH值
对于一些大文件,有时会需要计算部分内容的Hash,下面的函数计算了 文件头尾各1M,中间跳跃100M取10K 以及文件大小的Hash值 public static String CalHash(Str ...
- 【转】Java计算文件的hash值
原文地址:http://blog.csdn.net/qq_25646191/article/details/78863110 如何知道一个文件是否改变了呢?当然是用比较文件hash值的方法,文件has ...
- C#实现像Git那样计算Hash值
从Git Tip of the Week: Objects一文中得知,Git是这样计算提交内容的Hash值的: Hash算法用的是SHA1 计算前,会在内容前面添加"blob 内容长度\0& ...
随机推荐
- 读取含有BOM头的文件遇到的问题
需求是读取一个csv文件,然后解析成对应的数据结构.csv必须包含指定的某些列,通过列名header来进行校验. 解析配置文件的方法. public List<QuestionData> ...
- Jenkins构建Android项目持续集成之findbugs的使用
Findbugs简介 关于findbugs的介绍,可以自行百度下,这里贴下百度百科的介绍.findbugs是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题 ...
- 解决MyEclipse中的Building workspace问题
解决MyEclipse中的Building workspace问题 1.方法一 点击"Project",取消勾选"Build Automatically" 2. ...
- HALCON学习-资料
HALCON学习网: http://www.ihalcon.com/ 学习资料推荐博客: http://k594081130.blog.163.com/blog/static/218359013201 ...
- php composer的学习之路(一)
composer的介绍请看这里 http://docs.phpcomposer.com/00-intro.html composer的安装过程我就不介绍了,windows系统下跟其他安装没区别,一直 ...
- 数列分块总结——题目总版(hzwer分块九题及其他题目)(分块)
闲话 莫队算法似乎还是需要一点分块思想的......于是我就先来搞分块啦! 膜拜hzwer学长神犇%%%Orz 这九道题,每一道都堪称经典,强力打Call!点这里进入 算法简述 每一次考试被炸得体无完 ...
- NOIP2010题解
所有题目链接均来自洛谷 T1机器翻译 原题戳这里 自古T1是水题 因为每一个数字都小于1000,所以对于是否在队列中可以开数组查询 对于大小的限制,弄一个队列维护大小即可(水题呀...) 这题在Win ...
- 剑指offer-(20)包含min函数的栈
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 题目分析 首先一开始我们分析得到最小值肯定要比较嘛,和栈里面的数据一一比较,但是栈这种数据结构,你又只能和栈顶弹出来的 ...
- 初探WebSocket
初探WebSocket node websocket socket.io 我们平常开发的大部分web页面都是主动'拉'的形式,如果需要更新页面内容,则需要"刷新"一个,但Slack ...
- 详解QT5.10.0搭载OpenCV3.4.0环境配置步骤说明
一.准备工作: 1下载Qt5.10.0 和 Qt Creator 4.5.0软件(http://download.qt.io/official_releases/qt/) 2.下载opencv3.40 ...