Python3学习之路~5.12 hashlib & hmac & md5 & sha模块

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

import md5

hash = md5.new()
hash.update('Hello')
print hash.hexdigest()
md5-废弃
import sha

hash = sha.new()
hash.update('Hello')
print hash.hexdigest()
sha-废弃
import hashlib

# ######## md5 #########
hash = hashlib.md5()
hash.update(b"Hello")
hash.update(b"It's me")
print(hash.digest()) # b']\xde\xb4{/\x92Z\xd0\xbf$\x9cR\xe3Br\x8a' 二进制数据字符串
print(hash.hexdigest()) # 5ddeb47b2f925ad0bf249c52e342728a 16进制格式hash,明文为“HelloIt's me”
print(len(hash.hexdigest())) #32

hash2 = hashlib.md5()
hash2.update('你好'.encode(encoding='utf-8'))
print(hash2.hexdigest()) # 7eca689f0d3389d9dea66ae112e5cfd7

# ######## sha1 #########
hash =hashlib.sha1()
hash.update(b'Hello')
print(hash.hexdigest()) # f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0

# ######## sha256 ########
hash = hashlib.sha256()
hash.update(b'Hello')
print(hash.hexdigest())

# ######## sha384 ########
hash = hashlib.sha384()
hash.update(b'Hello')
print(hash.hexdigest())

# ######## sha512 ########
hash = hashlib.sha512()
hash.update(b'Hello')
print(hash.hexdigest())
hashlib模块使用

以上加密算法虽然依然非常厉害,但存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。

import hashlib

hash = hashlib.md5(b'898oaFs09f') # key即898oaFs09f
hash.update(b'Hello') # 明文为Hello
print(hash.hexdigest())

还不够吊?python 还有一个 hmac 模块,它内部对我们创建 key 和 内容 再进行处理然后再加密

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

import hmac

h = hmac.new(b'mykey',msg=b'Hello world')
print(h.hexdigest()) # 807f6a8c01dcf0d82eda2dd704291c78

h = hmac.new(b'mykey',msg='你好'.encode(encoding='UTF-8'))
print(h.hexdigest()) # 0fc9eba32da88e49cefa687b7e6d6927

h = hmac.new(b"mykey") # key = 'mykey'
h.update(b'Hello world') # msg='Hello world')
print(h.hexdigest()) # 807f6a8c01dcf0d82eda2dd704291c78
hmac模块使用

更多关于md5,sha1,sha256等介绍的文章看这里https://www.tbs-certificates.co.uk/FAQ/en/sha256.html 

猜你喜欢

转载自www.cnblogs.com/zhengna/p/9233746.html