zoukankan      html  css  js  c++  java
  • 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'x80x03}qx00(Xx02x00x00x00k1qx01Xx02x00x00x00v1qx02Xx02x00x00x00k2qx03Xx02x00x00x00v2qx04u.'
    

    将序列化后的字符串保存到文件中

    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()))
    
  • 相关阅读:
    禁止修改的消息首部
    文章详情列表接口 小程序及 模拟器 条数 错误 浏览器正确 调大mysql 查询超时时间 同一接口,小程序环境的TTFB相比浏览器约大5倍。
    七牛云霍锴:实时音视频 SDK 设计实践
    java网页数据抓取
    IDEA properties文件中文自动转为ASCII码(properties输入中文乱码问题)
    阿里官方Java代码规范标准《阿里巴巴Java开发手册 终极版 v1.3.0》下载
    从零开始配置Ubuntu20.04 amd64 virtualenvwarapper angr环境 并做ais3_crackme的CFG图
    请求被中止: 未能创建 SSL/TLS 安全通道 解决方案
    Docker
    爬虫
  • 原文地址:https://www.cnblogs.com/x54256/p/8296236.html
Copyright © 2011-2022 走看看