Python3基础-hashlib模块

用于加密相关的操作,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

import hashlib
import base64

#=====md5=====
hash = hashlib.md5() #md5算法
hash.update(bytes('hello,苏苏',encoding='utf-8')) #方法1  需要接收的参数是一个字节对象(字节字符串,如:b"Hello,World!")
print(hash.hexdigest()) #返回摘要,作为十六进制数据字符串值
print(hash.digest())  #返回摘要,作为二进制数据字符串值


hash = hashlib.md5() #md5算法
hash.update('hello,苏苏'.encode('utf-8')) #方法2
print(hash.hexdigest()) #返回摘要,作为十六进制数据字符串值
print(hash.digest())  #返回摘要,作为二进制数据字符串值

#==========获取的字符串md5加密后,将加密后的字符串base64编码=====
hash = hashlib.md5() #md5算法
hash.update('hello,苏苏'.encode('utf-8'))
md5str = hash.digest()

#base64编码
bencodestr = base64.b64encode(md5str)
print("base64后的二进制",bencodestr)
print("base64后的字符",bencodestr.decode('utf-8'))

encodestr = bencodestr.decode('utf-8')


#base64解码
decodestr = base64.b64decode(encodestr)
print("base64后的二进制",decodestr)
af67d034b3ec5a866acc224b01a02158
b'\xafg\xd04\xb3\xecZ\x86j\xcc"K\x01\xa0!X'
af67d034b3ec5a866acc224b01a02158
b'\xafg\xd04\xb3\xecZ\x86j\xcc"K\x01\xa0!X'
base64后的二进制 b'r2fQNLPsWoZqzCJLAaAhWA=='
base64后的字符 r2fQNLPsWoZqzCJLAaAhWA==
base64后的二进制 b'\xafg\xd04\xb3\xecZ\x86j\xcc"K\x01\xa0!X'
执行结果如下

备注:

首先,Base64生成的编码都是ascii字符。

其次,python3中字符都为unicode编码,而b64encode\b64decode函数的参数为byte类型,所以必须先转码。

#======sha512==========
hash= hashlib.sha512()
hash.update('hello,苏苏'.encode('utf-8'))
print(hash.hexdigest())

SHA1, SHA224, SHA256, SHA384类似的代码

以上加密算法虽然依然非常厉害,但是通过撞库可以反解。

===》解决方法:加密算法中添加自定义key再来做加密。

import hashlib
hash= hashlib.sha512('12345678'.encode('utf-8')) #key
hash.update('苏苏'.encode('utf-8'))
print(hash.hexdigest())

python内置还有一个 hmac 模块,它内部对我们创建 key 和 内容 进行进一步的处理然后再加密 #hmac模块实现了标准的Hmac算法

import hmac
hmac = hmac.new('12345678'.encode('utf-8'))
hmac.update('苏苏'.encode('utf-8'))
print(hmac.hexdigest())

 

posted @ 2019-11-01 17:39  槑槑DE  阅读(161)  评论(0编辑  收藏  举报