# # md5加密:不可逆加密
# # 碰撞解密:用数据再进行一次加密,与原加密结果做匹配
import hashlib
data = '数据'
###这个必须是字符串类型的,其他类型的不可以
lock_obj = hashlib.md5(data.encode('utf-8'))
# 传入加密数据,生产加密锁对象,
result = lock_obj.hexdigest()
# 获取加密后的16进制的加密串
print(result)
print('=================')
data1 = '数据数据数据数据数据数据数据数据数据数据数据数据'
data2 = ''
lock_obj1 = hashlib.md5(data1.encode('utf-8')) # 生产加密锁对象,传入加密数据
lock_obj2 = hashlib.md5(data2.encode('utf-8')) # 生产加密锁对象,传入加密数据
result1 = lock_obj1.hexdigest() # 获取加密后的加密串
result2 = lock_obj2.hexdigest() # 获取加密后的加密串
print(result1)
print(result2)
###不管传入的数据长度是多少,生成的这个md5验证码长度始终是一样的
print('==================')
###利用update 将一个数据分几次上传
# # update可以往锁对象中添加加密数据
date = '123456789'
##一次性将123456789上传加密
obj = hashlib.md5(date.encode('utf-8'))
print(obj.hexdigest())
##分三次将数据上传加密
lock_obj = hashlib.md5()
lock_obj.update(b'123')
lock_obj.update(b'456')
lock_obj.update(b'789')
print(lock_obj.hexdigest())
###从程序的运行结果看,只要数据内容是一样的,使用同一套加密算法,
# 不管是分几次上传数据加密,得到的结果都是一样的
print(hashlib.md5('123abc嘿嘿000'.encode('utf-8')).hexdigest())
###当加密的内容中包含汉字,需要编码一下 加上.encode('utf-8)
# 注:要为新数据提供加密,一定要为该数据创建一个加密对象
# # 加盐
# # 什么是加盐:在原数据前或后添加一些预定的数据,与原数据一起进行加密
# # 为什么要加盐:
# # 1.当原数据过于简单,可以对其加盐,提高数据的复杂度
# # 2.盐与数据有一定相似度,混淆对真实数据的提取
#
# data = 'ab_12'
# lock_obj = hashlib.md5()
# lock_obj.update(b'a12_d')
# lock_obj.update(data.encode('utf-8'))
# lock_obj.update(b'dd_121')
# print(lock_obj.hexdigest())
# # a12_dab_12dd_121
#
#
# # 其他位数加密
# lock_obj = hashlib.sha3_256(b'123')
# print(lock_obj.hexdigest())
# lock_obj = hashlib.sha3_512(b'123')
# lock_obj.update(b'salt')
# print(lock_obj.hexdigest())
#
#
# import hmac
# # 与hashlib的不同点:生产锁对象时必须提高数据参数
# lock_obj = hmac.new(b'')
# print(lock_obj.hexdigest())
#
# lock_obj = hmac.new(b'')
# lock_obj.update(b'salt')
# print(lock_obj.hexdigest())
# import hashlib
# 加盐
# 什么是加盐:在原数据前或后添加一些预定的数据,与原数据一起进行加密
# 为什么要加盐:
# 1.当原数据过于简单,可以对其加盐,提高数据的复杂度
# 2.盐与数据有一定相似度,混淆对真实数据的提取
# lock_obj = hashlib.md5() # 生产锁对象可以添加数据参数也可以省略
# lock_obj.update(b'before_salt')
# lock_obj.update('要被加密的数据'.encode('utf-8'))
# lock_obj.update(b'after_salt')
# print(lock_obj.hexdigest())
# 注:要为新数据提供加密,一定要为该数据创建一个加密对象
# 其他算法
# lock_obj = hashlib.sha3_256(b'123')
# print(lock_obj.hexdigest())
# lock_obj = hashlib.sha3_512(b'123')
# lock_obj.update(b'salt')
# print(lock_obj.hexdigest())