zoukankan      html  css  js  c++  java
  • hashlib模块和logging模块

    hashlib模块:

      能够把一个字符串数据类型的变量转换成一个定长的密文的字符串

      字符串里的每一个字符都是一个十六进制

      对于同一个字符串,不管这个字符串有多长,只要是相同的,

      无论在何种环境下,多少次执行,在任何语言中

      使用相同的算法、相同的手段得到的结果永远是一样的

      只要是不同的字符串,得到的结果一定是不同的

      字符串---》密文,密文是不可逆的

    user=input('账号:')
    pwd=input('密码:')
    md5_obj=hashlib.md5(user.encode('utf-8'))
    md5_obj.update(pwd.encode('utf-8'))
    s=md5_obj.hexdigest()
    print(s)
    

      采用动态加盐的方式进行密码加密

    def comparesize(fp1,fp2):
        import hashlib
        md5_obj = hashlib.md5()
        with open(fp1, 'rb') as f:
            while 1:
                md5_obj.update(f.read(102400))
                if not f.read(102400):
                    break
        c = md5_obj.hexdigest()
    
        md5_obj1 = hashlib.md5()
        with open(fp2, 'rb') as f:
            while 1:
                md5_obj1.update(f.read(102400))
                if not f.read(102400):
                    break
        cc = md5_obj1.hexdigest()
    
        if c == cc:
            return ('ok')
        else:
            return ('ng')
    
    s=r'G:homeworkPracticehashlib练习1.txt'
    s2=r'G:homeworkPracticehashlib练习2.txt'
    flag=comparesize(s,s2)
    print(flag)
    

      对于过大的文件夹,可以进行多次update方式后在进行hexdigest运算,不影响结果

    logging模块

    功能:日志格式的规范、操作的简化、日志的分级管理

    logging不能帮你做的事情:

      自动生成你要打印的内容

    logging模块的使用:

      普通配置型 简单的,可订制化差

      对象配置型 复杂的,可订制化强

    认识日志分级
    
    import logging
    logging.debug('debug message')      # 调试模式
    logging.info('info message')        # 基础信息
    logging.warning('warning message')  # 警告
    logging.error('error message')      # 错误
    logging.critical('critical message')# 严重错误
    
    import logging
    
    logging.basicConfig(level=logging.DEBUG)
    logging.debug('debug message')      # 调试模式
    logging.info('info message')        # 基础信息
    logging.warning('warning message')  # 警告
    logging.error('error message')      # 错误
    logging.critical('critical message')# 严重错误
    

      根据level决定是否现实debug等级内容

    import logging
    logging.basicConfig(level=logging.DEBUG,
                        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                        datefmt='%a, %d %b %Y %H:%M:%S',
                        filename='test.log')
    logging.debug('debug message')      # 调试模式
    logging.info('info message')        # 基础信息
    logging.warning('warning message')  # 警告
    logging.error('error message')      # 错误
    logging.critical('critical message')# 严重错误
    

      不能够将一个log信息既输出到屏幕又输出到文件

    解决办法:

    创建一个logger对象的形式来操作文件夹

    1、创建一个logger对象

    2、创建一个文件管理操作符

    3、创建一个屏幕管理操作符

    4、创建一个日志输出格式

    5、文件管理操作符绑定一个格式

    6、屏幕管理操作符绑定一个格式

    7、logger对象绑定文件管理操作符

    8、logger对象绑定屏幕管理操作符

    import logging
    # 创建一个logger对象
    logger = logging.getLogger()
    # 创建一个文件管理操作符
    fh = logging.FileHandler('logger.log',encoding='utf-8')
    # 创建一个屏幕管理操作符
    sh = logging.StreamHandler()
    # 创建一个日志输出的格式
    format1 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    
    # 文件管理操作符 绑定一个 格式
    fh.setFormatter(format1)
    # 屏幕管理操作符 绑定一个 格式
    sh.setFormatter(format1)
    logger.setLevel(logging.DEBUG)
    # logger对象 绑定 文件管理操作符
    # logger.addHandler(fh)
    # logger对象 绑定 屏幕管理操作符
    logger.addHandler(sh)
    
    logger.debug('debug message')      # 调试模式
    logger.info('我的信息')        # 基础信息
    logger.warning('warning message')  # 警告
    logger.error('error message')      # 错误
    logger.critical('critical message')# 严重错误
    

      

  • 相关阅读:
    Windows Server 2016-配置Windows Defender防病毒排除项
    Windows Server 2016-增强IPAM
    第五讲:虚拟化架构、特点及优势
    第四讲:虚拟化概念及相关知识介绍
    第三讲:云计算的产生和特点
    第二讲:云分类及服务模式
    第一讲:云计算基础知识第一讲:云计算概念
    每天一个linux命令(56)--crontab命令
    每天一个linux命令(55)--at命令
    每天一个linux命令(54)--watch命令
  • 原文地址:https://www.cnblogs.com/wszxdzd/p/9452015.html
Copyright © 2011-2022 走看看