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

>>> #注:加密数据时一定要指定数据编码格式。

...

>>> 

 

posted on 2018-07-16 11:03  光阴8023  阅读(254)  评论(0编辑  收藏  举报