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)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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())