hash值/产品有三大特性:
1 只要传入的内容一样,得到的hash值必然一样=====>要用明文传输密码文件完整性校验
2 不能由hash值返解成内容=======》把密码做成hash值,不应该在网络传输明文密码(只能有内容返回hash值)
3 只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的(如从网上下载文件要进行hash校验,保证网络传输没有丢包)
import hashlib
s = "123456" + "@¥gbg3t23!#"
bs = s.encode() # 返回编码后的字符串,它是一个 bytes 对象。加密算法的入参都需要是字节类型的对象
m = hashlib.md5( bs ) # md5的构造对象
print(m.hexdigest()) # 产出hash值
m2 = hashlib.sha256( bs ) #sha256的构造对象
print(m2.hexdigest()) # 产出hash值
# m = hashlib.sha512( bs ) #sha512的构造对象
# m = hashlib.sha224( bs ) #sha224的构造对象
#update()方法用来增加加密的内容
import hashlib
m = hashlib.md5() # 括号内也可以传值,类型也要求是bytes类型
m.update('你好呀!'.encode('utf-8'))
n= m.hexdigest() # 9e49eb8e75b9a87424e388b862ea5f83
# 与上述hash的结果一样
m = hashlib.md5('你'.encode('utf-8')) # 括号内也可以传值,类型也要求是bytes类型
m.update('好呀!'.encode('utf-8'))
print(m.hexdigest())
# 加盐
def my_md5(s,salt=""): # 加盐是指在加密的过程中,增加一个约定的字符串,用来提高安全性,降低被破解的风险。
new_s = str(s) + salt
m = hashlib.md5(new_s.encode())
return m.hexdigest()
#base64算法加密后可以解密,hashlib不可以。
import base64
s = "wanshu、+@#%chengsdgsdgsdgsdgssgsgsg"
result = base64.b64encode(s.encode()).decode()
print(result)