day5-hashlib模块

介绍

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

MD5加密

MD5哈希算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示

import hashlib

m2=hashlib.md5()
m2.update(b"hello world it's a girl")
print(m2.hexdigest())

#输出
0d0b2ce6e094adda79f93fdfa500d3f0 

也可以将对象多次分块进行MD5哈希(update),但是最终结果也是一样的:

import hashlib

m1=hashlib.md5() #md5加密 
m1.update(b"hello world") 
print(m1.hexdigest()) #1

m1.update(b"it's a girl") 
print(m1.hexdigest()) #2 
输出 
5eb63bbbe01eeed093cb22bb8f5acdc3 #1 

0d0b2ce6e094adda79f93fdfa500d3f0 #2
# 在#1的基础上和#2一起哈希的结果

SHA1加密

SHA1的结果是160 bit字节,通常用一个40位的16进制字符串表示。

hash=hashlib.sha1()
hash.update(b'admin')
print(hash.hexdigest())
#输出
d033e22ae348aeb5660fc2140aec35850c4da997

SHA256加密

hash=hashlib.sha256()
hash.update(b'admin')
print(hash.hexdigest())
#输出
8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918

SHA384加密

hash=hashlib.sha384()
hash.update(b'admin')
print(hash.hexdigest())
#输出
9ca694a90285c034432c9550421b7b9dbd5c0f4b6673f05f6dbce58052ba20e4248041956ee8c9a2ec9f10290cdc0782

SHA512加密

hash=hashlib.sha512()
hash.update(b'admin')
print(hash.hexdigest())
#输出
c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec

hash=hashlib.sha512()
hash.update('你好'.encode(encoding="utf-8"))
print(hash.hexdigest())
#输出
5232181bc0d9888f5c9746e410b4740eb461706ba5dacfbc93587cecfc8d068bac7737e92870d6745b11a25e9cd78b55f4ffc706f73cfcae5345f1b53fb8f6b5

比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法不仅越慢,而且哈希长度更长。

hmac加密

散列消息鉴别码,简称HMAC,是一种基于消息鉴别码MAC(Message Authentication Code)的鉴别机制。使用HMAC时,消息通讯的双方,通过验证消息中加入的鉴别密钥K来鉴别消息的真伪;一般用于网络通信中消息加密,前提是双方先要约定好key,就像接头暗号一样,然后消息发送把用key把消息加密,接收方用key + 消息明文再加密,拿加密后的值 跟 发送者的相对比是否相等,这样就能验证消息的真实性,及发送者的合法性了。

import hmac
h=hmac.new('山穷水尽疑无路'.encode(encoding="utf-8"),'柳暗花明又一村'.encode(encoding="utf-8"))
print(h.hexdigest())
#输出
5f90dcd2211cd11601ce05195e3c5232
posted @ 2017-07-31 14:49  Mr.hu  阅读(102)  评论(0)    收藏  举报