json模块与hashlib模块的使用

"""
# json&pickle模块
# 1.什么是序列化
# 2.为何要有序列化
# 3.如何做序列化与反序列化
1.序列化指的是把内存数据类型转换成一个特定格式的内容,该格式的内容
可用于存储或传输给其他平台使用
内存的数据类型------》序列化-----------》特定格式(json、pickle模式)
内存的数据类型《-------反序列化《---------特定格式(json、pickle模式)
2.如何要有序列化?
序列化得到结果----》特定格式的用途有两种用途
1.可用于存储----》用来存档
2.传输给其他平台使用-----》跨平台数据交互
强调:针对用途2的特定格式:应该是一种通用,能被所有语言识别的格式json
针对用途1的特定格式:应该是一种专用的模式pickle


"""
import json
res=json.dumps([1,'aaa',True,False])
print(res,type(res))#[1, "aaa", true, false] <class 'str'>
res=json.loads(res)
print(res,type(res))#[1, 'aaa', True, False] <class 'list'>

# 将序列化结果写入文件简单方法
with open("test.json","wt",encoding="utf-8")as f:
json.dump([666,'yoona',False,True],f)
with open("test.json","rt",encoding="utf-8")as f:
res=json.load(f)
print(res)
#json验证:json格式兼容的是所有语言通用的数据类型,不能识别单一语言类型
# json.jumps({1,2,3,6,4})
#json强调:搞清楚json格式,不要与python混淆
"""
1.什么是哈希hash?
hash是一种算法,该算法接收传入的内容,经过运算得到一串hash值
hash值的特点:
1.1传入的内容一样,得到的hash值必然一样
1.2不能由hash值反解成内容
1.3只要使用的hash算法不变,得到的hash值长度是一定的
2.hash的用途
12345abc------>hash字符串
客户端-------hash字符串----------服务端
hash值即密文密码
特点1.2用于密码密文传输与验证
特点1.1与1.3用于文件完整性校验
3.如何用?

"""
# 原材料---------hash工厂---------hash值
"""
import hashlib
m=hashlib.md5()
m.update("hello".encode("utf-8"))
m.update(b"world")
res=m.hexdigest()
print(res)
# 利用撞库破解密码
import hashlib
# res=hashlib.md5(b"yoona123")
# res=res.hexdigest()
# print(res)
dic={}
pwd="a26bdd1136c3401ed70d8e45a6c52751"
passwords=["yoo12na3","yo12ona3","321noyao","yoona123","yoo321na"]
for i in passwords:
res=hashlib.md5(i.encode("utf-8"))
dic[i]=res.hexdigest()
print(dic)
for k,v in dic.items():
if v==pwd:
print("密码破解成功!密码是%s"%k)
break

"""
#提升撞库成本 ----》密码加盐
import hashlib
m=hashlib.md5()
m.update("烟笼寒水月笼纱".encode("utf-8"))
m.update("hello".encode("utf-8"))
m.update("夜泊秦淮近酒家".encode("utf-8"))
print(m.hexdigest())
原文地址:https://www.cnblogs.com/mayrain/p/12607042.html