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