Python常用模块-hashlib/hmac加密
Python常用模块-hashlib/hmac加密
hashlib
用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1,,SHA224,SHA256,SHA384,SHA512,MD5 算法
https://www.cnblogs.com/hhfzj/p/7103113.html
http://www.cnblogs.com/alex3714/articles/5161349.html
https://www.cnblogs.com/single-boy/p/7617768.html
基本语法
import hashlib m = hashlib.md5()#创建对象 m.update('宝塔镇河妖'.encode(encoding='utf-8'))#添加对象时需要指定编码 print(m.digest())#以二进制格式显示加密信息 print(m.hexdigest())#以十六进制格式显示加密信息(常用) print(len(m.hexdigest())) #计数
>>> import hashlib
>>> m = hashlib.md5()#创建对象
>>> m.update('宝塔镇河妖'.encode(encoding='utf-8'))#添加对象时需要指定编码
>>> print(m.digest())#以二进制格式显示加密信息
b'\x12y\xf9\xbb=\xd1\xf1\xe9\xdfSMB\x82\xaf\x96\xa5'
>>> print(m.hexdigest())#以十六进制格式显示加密信息(常用)
1279f9bb3dd1f1e9df534d4282af96a5
>>> print(len(m.hexdigest())) #计数
32
>>>
范例
import hashlib #导入模块 ######## md5 ########### m = hashlib.md5() #创建一个对象 m.update(b"hhf") #加密字符串 b代表byte,是把字符串转换成byte类型,也可以用bytes()强制转换 #m.update(bytes("hhf",encoding='utf-8')) #不指定encoding会报错,TypeError: Unicode-objects must be encoded before hashing #bytes() 强制转换为字节类型 print(m.digest()) #取加密后字符串 转换成2进制格式hash print(m.hexdigest()) #16进制格式hash,比较常用 print(len(m.hexdigest())) ###########-sha1 ######## hash = hashlib.sha1() hash.update(b'admin') print(hash.hexdigest()) print(len(hash.hexdigest())) # # ######## sha256 ######## hash = hashlib.sha256() hash.update(b'admin') print(hash.hexdigest()) print(len(hash.hexdigest())) # # ######## sha384 ######## hash = hashlib.sha384() hash.update(b'admin') print(hash.hexdigest()) print(len(hash.hexdigest())) # # ######## sha512 ######## hash = hashlib.sha512() hash.update(b'admin') print(hash.hexdigest()) print(len(hash.hexdigest()))
#以上的加密方法都无法解密
>>> import hashlib #导入模块
>>> ######## md5 ###########
... m = hashlib.md5() #创建一个对象
>>> m.update(b"hhf") #加密字符串 b代表byte,是把字符串转换成byte类型,也可以用bytes()强制转换>>> #m.update(bytes("hhf",encoding='utf-8')) #不指定encoding会报错,TypeError: Unicode-objects must be encoded before hashing
... #bytes() 强制转换为字节类型
... print(m.digest()) #取加密后字符串 转换成2进制格式hash
b'\x8e7\xc4\xf6\xba\x84\x039\xeaW\xd11\x85V\xef\x94'
>>> print(m.hexdigest()) #16进制格式hash,比较常用
8e37c4f6ba840339ea57d1318556ef94
>>> print(len(m.hexdigest()))
32
>>>
>>> ###########-sha1 ########
... hash = hashlib.sha1()
>>> hash.update(b'admin')
>>> print(hash.hexdigest())
d033e22ae348aeb5660fc2140aec35850c4da997
>>> print(len(hash.hexdigest()))
40
>>>
>>> # # ######## sha256 ########
... hash = hashlib.sha256()
>>> hash.update(b'admin')
>>> print(hash.hexdigest())
8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
>>> print(len(hash.hexdigest()))
64
>>>
... # # ######## sha384 ########
... hash = hashlib.sha384()
>>> hash.update(b'admin')
>>> print(hash.hexdigest())
9ca694a90285c034432c9550421b7b9dbd5c0f4b6673f05f6dbce58052ba20e4248041956ee8c9a2ec9f10290cdc0782
>>> print(len(hash.hexdigest()))
96
>>>
>>> # # ######## sha512 ########
... hash = hashlib.sha512()
>>> hash.update(b'admin')
>>> print(hash.hexdigest())
c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec
>>> print(len(hash.hexdigest()))
128
>>>
>>>
...
hmac
散列消息鉴别码,简称HMAC,是一种基于消息鉴别码MAC(Message Authentication Code)的鉴别机制。使用HMAC时,消息通讯的双方,通过验证消息中加入的鉴别密钥K来鉴别消息的真伪;
一般用于网络通信中消息加密,前提是双方先要约定好key,就像接头暗号一样,然后消息发送把用key把消息加密,接收方用key + 消息明文再加密,拿加密后的值 跟 发送者的相对比是否相等,这样就能验证消息的真实性,及发送者的合法性了。
https://www.cnblogs.com/single-boy/p/7617768.html
import hmac hm = hmac.new(b'abc') hm = hmac.new('脑残'.encode(encoding='utf-8'),b'1233434') print(hm.digest()) print(hm.hexdigest()) print(len(hm.hexdigest())) #注:加密数据时一定要指定数据编码格式。
>>> import hmac
>>> hm = hmac.new(b'abc')
>>> hm = hmac.new('脑残'.encode(encoding='utf-8'),b'1233434')
>>> print(hm.digest())
b'r)\xea\x04\xc5\xb8+*H%Iq\xa9K\t\x1c'
>>> print(hm.hexdigest())
7229ea04c5b82b2a48254971a94b091c
>>> print(len(hm.hexdigest()))
32
>>> #注:加密数据时一定要指定数据编码格式。
...
>>>