【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& ...
随机推荐
- linux内核体系结构
linux内核第一记 1.linux体系结构 从上图可知,Linux分为:用户空间和内核空间.内核空间和用户空间是程序执行的两种不同的状态,通过系统调用和硬件中断能够完成从用户空间到内核空间的 ...
- [php] php操作xml
xml文件 <?xml version="1.0" encoding="ISO-8859-1"?> <root> <item id ...
- java.lang.IllegalStateException: Failed to load ApplicationContext
1.错误描述 七月 13, 2014 6:34:41 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBean ...
- 如何注册Filter
AX文件的一个对外接口DllRegisterServer,由外部调用,比如注册AX的时候:regsvr32 xxx.ax 通常情况下,我们的filter可能注册在"Direct ...
- 代码管理必备-----git使用上传码云
作为一个程序员,你要学会代码的管理,这是一个最基本的修养,就像是一个剑客的剑谱,代码管理,目前流行的是svn和git,但是很不好的是git如果没有插件的话,很多人都不会用git bash 来实现自己的 ...
- Django学习-22-Form
Form是Django的功能较强的验证组件,负责各种表单验证 input中的name属性值要和form中的字段名相同 from django import forms from django.form ...
- iOS - UIView 动画
1.UIView 动画 核心动画 和 UIView 动画 的区别: 核心动画一切都是假象,并不会真实的改变图层的属性值,如果以后做动画的时候,不需要与用户交互,通常用核心动画(转场). UIView ...
- Python机器学习 (Python Machine Learning 中文版 PDF)
Python机器学习介绍(Python Machine Learning 中文版) 机器学习,如今最令人振奋的计算机领域之一.看看那些大公司,Google.Facebook.Apple.Amazon早 ...
- Luogu P3412 仓鼠找$sugar$ $II$
Luogu P3412 仓鼠找\(sugar\) \(II\) 题目大意: 给定一棵\(n\)个点的树, 仓鼠每次移动都会等概率选择一个与当前点相邻的点,并移动到此点. 现在随机生成一个起点.一个终点 ...
- angular编写表单验证
angular编写表单验证 一.整体概述 表单内容如下图,包括常用的用户名.密码.确认密码.手机.邮箱等 整体js代码很少,就一个指令用于写确认密码和密码是否相等.其他 验证都是使用angular自带 ...