• PYTHON-模块 logging hashlib


    '''
    import logging

    # 1. 控制日志级别
    # 2. 控制日志格式
    # 3. 控制输出的目标为文件
    logging.basicConfig(filename='access.log',
    format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S %p',
    level=10,
    )

    logging.debug('debug日志') # 10
    logging.info('info日志') # 20
    logging.warning('warning日志') #30
    logging.error('error日志')#40
    logging.critical('critical日志') #50

    # 火警的级别

    # 大功率电器
    # 抽烟
    # 烧烤
    # 自焚
    # 炸 药包

    '''
    # 1. 能够同时往终端与文件中记录日志
    # 2. 能够修改字符串编码

    import logging

    # 1. logger对象: 负责生产各种级别的日志
    logger1 = logging.getLogger('用户交易') # 日志名用来标识日志的与什么业务有关

    # 2. filter对象: 过滤日志

    # 3. handler对象: 控制日志输出目标位置
    fh1 = logging.FileHandler('a1.log',encoding='utf-8')
    fh2 = logging.FileHandler('a2.log',encoding='utf-8')
    ch = logging.StreamHandler()

    # 4. formmater对象
    formatter1 = logging.Formatter(
    fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S %p'
    )

    formatter2 = logging.Formatter(
    fmt='%(asctime)s - %(levelname)s : %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S %p'
    )

    # 5. 绑定logger对象与handler对象
    logger1.addHandler(fh1)
    logger1.addHandler(fh2)
    logger1.addHandler(ch)

    # 6. 绑定handler对象与formatter对象

    fh1.setFormatter(formatter1)
    fh2.setFormatter(formatter1)
    ch.setFormatter(formatter2)

    # 7. 设置日志级别,有logger对象与handler对象两层关卡,必须都放行最终日志才会放行,通常二者级别相同
    logger1.setLevel(10)
    fh1.setLevel(10)
    fh2.setLevel(10)
    ch.setLevel(10)

    # 8. 使用logger对象产生日志
    logger1.info('alex给egon转账1个亿')


    """
    hash lib
    hash是一种算法 是将一个任意长的数据 根据计算 得到一个固定长度特征码
    特征: 不同输入 可能会有相同的结果 几率特别小
    相同的输入 必然得到相同结果
    由于散列(特征)的性质 从原理来看是不可能 反解

    用来 验证 两个输入的数据是否一致
    使用场景
    1.密码验证
    123321 jahsajshajhsjahjas

    client 加密后结果 server 拿到加密后

    2.验证数据是否被篡改 比如游戏安装包 有没有被改过


    为了防止别人撞库成功 可用提升密码的复杂度 其次可以为密码加盐 (加点内容进去)
    """

    # ====================================================
    import hashlib

    m = hashlib.md5("aaa".encode("utf-8"))
    print(len(m.hexdigest()))

    # 撞库破解的原理 有人事先 把常见的 明文和密文的对应关系 存到了数据库中
    # 运气好就能查询到
    pwds = {"aaa":"47bce5c74f589f4867dbd57e9ca9f808"}


    h1 = hashlib.sha512("123".encode("utf-8"))
    h2 = hashlib.sha3_512("123".encode("utf-8"))

    # print(len(h.hexdigest()))
    print(h1.hexdigest())
    print(h2.hexdigest())

    # 2b70683ef3fa64572aa50775acc84855

    # 加盐
    m = hashlib.md5("321".encode("utf-8"))
    #加
    m.update("abcdefplkjoujhh".encode("utf-8"))

    print(m.hexdigest())

    import hmac
    # 没啥区别 只是在创建的时候必须加盐,了解
    h = hmac.new("abcdefjjjj".encode("utf-8"))

    h.update("123".encode("utf-8"))

    print(h.hexdigest())






  • 相关阅读:
    Vivado Non-Project Flow
    使用ngspice进行电路仿真
    Synopsys DC综合脚本示例
    解决Vivado XSDK在Ubuntu系统上自带UART Terminal Crash问题
    Ubuntu-18.04 LTS UEFI 安装U盘制作
    嵌入式处理器通过UART实现scanf和printf
    用于RISC-V的Makefile示例
    利用SSH隧道技术穿越内网访问远程设备
    C++基础-多态
    C++基础-继承
  • 原文地址:https://www.cnblogs.com/du-jun/p/9812863.html
Copyright © 2020-2023  润新知