在工作的时候,配置给用户的json数据,经常会被一些喜欢研究,好奇心特别重的用户查看并修改。通常一定会改坏掉。然后大喊一声:”又打不开拉!!!!”
对这种事情我是深恶痛绝了。所以我决定要加密他,你看不懂了。就不会想着乱搞了。哼(骄傲)
Pickle序列化:import pickle
def funx1(valuex):
print(“—————“,valuex)
jsondata={
“user”:”lin”,
“name”:”lindayuan”,
“age”:100,
“funx”:funx1 #保存函数地址,函数地址是以函数名确定的
}
#序列化,将字典转换为byte对象
bytejson=pickle.dumps(jsondata)
print(type(bytejson)) #输出:
#保存到文件中
open(“ww.txt”,”wb”).write(bytejson)
Pickle反序列化:import pickle
#必须有序列化相同的函数名,只要函数名相同即可,参数任意
def funx1():
print(“**********”)
strjson=open(“ww.txt”,”rb”).read()
#字符串转换为json对象
dicjson=pickle.loads(strjson)
print(dicjson[“age”]) #输出:100
dicjson[“funx”]() #调用函数,输出:**********
序列化(pickle的封装类)import shelve
#打开文件
s=shelve.open(“fileshelve”)
#建立列表数据
listx=[“11″,”22″,”33”]
#保存数据
s[“listx”]=listx
s[“user”]=”dongxiaodong”
s[“name”]=”dong”
#关闭文件
s.close()
反序列化:import shelve
#打开文件
s=shelve.open(“fileshelve”)
print(s.get(“listx”)) #输出:[’11’, ’22’, ’33’]
print(s.get(“user”)) #输出:dongxiaodong
#关闭文件
s.close()
加密与解密:
Base64 可逆import base64
#加密
en=base64.b64encode(“dongxiaodong”.encode(“utf-8”))
print(en.decode(“utf-8”)) #输出字符串:ZG9uZ3hpYW9kb25n
#解密
de=base64.b64decode(en).decode(“utf-8”)
print(de) #输出字*********aodong
md5 不可逆import hashlib
#方法一
mx=hashlib.md5() #s生成md5对象
mx.update(b”dongxiaodong”) #添加内容,拼接内容
mx.update(b”dd”)
# 输出十六进制格式
print(mx.hexdigest()) #输出:f67d530272ebb0cf17ec7cdf2372b6cb
#方法二
mx2=hashlib.md5(b”dongxiaodongdd”)
print(mx2.hexdigest()) #输出:f67d530272ebb0cf17ec7cdf2372b6cb
Sha1 不可逆import hashlib
s=hashlib.sha1()
s.update(b”dongxiaodongdd”)
print(s.hexdigest()) #输出:6a878a19687fc95d76f602d1580b54e0f0d2b88d
Hmac
键值对进行加密
import hmac
#参数(键,值)
h=hmac.new(b”dd”,b”dongxiaodong”)
#如果存在中文,则需要使用encode
#h=hmac.new(b”dd”,”东小东dd”.encode(“utf-8”))
print(h.hexdigest())
最后总结:
如果只是为了让一般用户看不懂,pickle就足够了
如果希望保护数据安全,使用base64
其他功能可以做参考