hashlib模块,random模块,序列化(json,pickle),XML
hashlib模块
######### md5 ######## hash = hashlib.md5() hash.update(bytes('admin', encoding='utf-8')) # 或hash.update("admin".encode("utf-8")) print(hash.hexdigest()) # 16进制 print(hash.digest()) ######## sha1 ######## hash = hashlib.sha1() hash.update(bytes('admin', encoding='utf-8')) print(hash.hexdigest()) ######### sha256 ######## hash = hashlib.sha256() hash.update(bytes('admin', encoding='utf-8')) print(hash.hexdigest()) ######### sha384 ######## hash = hashlib.sha384() hash.update(bytes('admin', encoding='utf-8')) print(hash.hexdigest()) ######### sha512 ######## hash = hashlib.sha512() hash.update(bytes('admin', encoding='utf-8')) print(hash.hexdigest())
以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。
######### md5 ######## hash = hashlib.md5(bytes('898oaFs09f',encoding="utf-8")) hash.update(bytes('admin',encoding="utf-8")) print(hash.hexdigest())
小Tips:
import hashlib m=hashlib.md5 m.updata(b'abc') m.updata(b'123') #m.updata(b'abc123') #两者结果一毛一样,so可以采用这种方式读取文件计算md5值 print(m.hexdigest) #16进制
python内置还有另一个 hmac 模块,它内部对我们创建 key 和 内容 进行进一步的处理然后再加密
import hmac h = hmac.new(bytes('898oaFs09f',encoding="utf-8")) h.update(bytes('admin',encoding="utf-8")) print(h.hexdigest())
random模块
random.random() # 生成0~1之间的数 random.randint(1,8) # 生成1~8之间的整数(包括8) random.choice('hello') # 生成随机字母
序列化
Python中用于序列化的两个模块
- json 用于【字符串】和 【python基本数据类型】 间进行转换
- pickle 用于【python特有的类型】 和 【python基本数据类型】间进行转换
Json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load
import json data = {'k1':'v1','k2':'v2'} json.dumps(data) # 将数据转换成pickle字符串(所有程序语言都认识,只能转换字典,列表等基本类型) >> '{"k1": "v1", "k2": "v2"}' import pickle data = {'k1':'v1','k2':'v2'} pickle.dumps(data) # 将数据转换成pickle字符串(只有Python语言认识,可以转换python中的函数、类...) >> b'\x80\x03}q\x00(X\x02\x00\x00\x00k1q\x01X\x02\x00\x00\x00v1q\x02X\x02\x00\x00\x00k2q\x03X\x02\x00\x00\x00v2q\x04u.'
将序列化后的字符串保存到文件中
data = {'k1':'v1'} import pickle with open("abc123.txt",'wb') as f: pickle.load(data,f) # 将data中的数据保存到文件中 import json with open("abc123.txt",'w') as f: json.dump(data,f) # 将data中的数据保存到文件中
XML
XML是实现不同语言或程序之间进行数据交换的协议,XML文件格式如下:
1 <data> 2 <country name="Liechtenstein"> 3 <rank updated="yes">2</rank> 4 <year>2023</year> 5 <gdppc>141100</gdppc> 6 <neighbor direction="E" name="Austria" /> 7 <neighbor direction="W" name="Switzerland" /> 8 </country> 9 <country name="Singapore"> 10 <rank updated="yes">5</rank> 11 <year>2026</year> 12 <gdppc>59900</gdppc> 13 <neighbor direction="N" name="Malaysia" /> 14 </country> 15 <country name="Panama"> 16 <rank updated="yes">69</rank> 17 <year>2026</year> 18 <gdppc>13600</gdppc> 19 <neighbor direction="W" name="Costa Rica" /> 20 <neighbor direction="E" name="Colombia" /> 21 </country> 22 </data>
1、解析XML文件
a.打开文件读取内容后解析
from xml.etree import ElementTree str_xml = open('new.xml', 'r').read() # 打开文件,读取XML内容 root = ElementTree.XML(str_xml) # 将字符串解析成xml特殊对象,root代指xml文件的根节点 print(root) # <Element 'data' at 0x7f43dadec688>
b.直接解析XML文件
from xml.etree import ElementTree as ET tree = ET.parse("new.xml") # 直接解析xml文件 root = tree.getroot() # 获取xml文件的根节点 print(root) # xml对象
c.xmltodict模块
import xmltodict with open('new.xml','r') as f: print(xmltodict.parse(f.read()))