• hashlib 和 logging模块


    一:hashlib干嘛用的

    对字符加密,其实就是一个自定义的字符编码表

    原来的0和1转换成字符,而现在的 是字符转换成另一个字符

    m=hashlib.md5()
    pwd=b'123'
    m=update(pwd)
    print(m.hexdigest())
    

    它的特点

    • 1 hash 加密之后的长度一样6
    • 2 hash加密的东西一样则哈希结果一样
    • 3 如果使用同一个哈希字符编码表,不断地哈希结果会累加
    # m=hashlib.md5()   比较难破解
    # pwd='hello world'.encode('utf-8')  是二进制形式
    
    

    破解密码举例

    密码是其中的一个:
    pwd_list = [
        'hash3714',
        'hash1313',
        'hash94139413',
        'hash123456',
        '123456hash',
        'h123ash',
    ]
    def break_pwd(hash_pwd):
    	for pwd in pwd_list:
            m=hashlib.md5()
            m.update(pwd.encode('utf_8'))
            if m.hexdigest()==hash_pwd:
                return pwd
    if __name__=='__main__':
        hash_pwd='0562b36c3c5a3925dbe3c4d32a4f2ba2'
        pwd=break_pwd(hash_pwd)
        print('这人的密码是:',pwd)
        
    

    加盐处理

    import hmac
    m=hmac.new(b'123')  #加盐处理
    m.update(b'123')
    print(m.hexdigest())   # a31dce88633f3393f6c475525ff48301
    m.update(b'456')
    print(m.hexdigest())    # a31dce88633f3393f6c475525ff48301
    
    
    m=hmac.new(b'123')
    m.update(b'123456')
    print(m.hexdigest())	#a31dce88633f3393f6c475525ff48301
    
    
    m=hmac.new(b'456')
    m.update(b'123456')
    print(m.hexdigest())	## 036891f8964d543c01f4718280d5853e
    
    m=hmac.new(b'123123456')
    print(m.hexdigest())	## 643e0c01cbc74229a8c29128b8634287
    
    import uuid
    
    for i in range(10):
        print(uuid.uuid4())		#永不重复,因为它是按照时间来生成的
        
    

    二:logging模块

    有何作用

    相当于记录日记(把重要的记录下来)

    v3 logging模块包含四种角色:logger、filter、Formatter对象、Handle

    1. logger 你是哪个版本的日志
    2. filter,不用管
    3. handler,是保存在文件中,还是打印到屏幕里
    4. formatter,控制日志的格式
    
    1 logger:产生日记的对象
        
        logger=logging.getlogger('bank')
        
    2 Filter:过滤日记的对象(忽略)
        
    3 Formatter 对象 :控制日记的格式
    
    f1 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',
                           datefmt='%Y-%m-%d %H:%M:%S %p', )
    f2 = logging.Formatter('%(asctime)s :  %(message)s',
                           datefmt='%Y-%m-%d %H:%M:%S %p', )
    f3 = logging.Formatter('%(name)s %(message)s', )
    
    
    4 Handlle: 保存在文件中,还是打印到屏幕上
        
        
    t1 = logging.FileHandler('t1.log')  # 往文件中打印
    t2 = logging.FileHandler('t2.log')  # 往文件中打印
    sm = logging.StreamHandler()  # 往屏幕打印
    
    5. formatter绑定到handler里面去
    t1.setFormatter(f1)
    t2.setFormatter(f2)
    sm.setFormatter(f3)
    
    6 formatter 绑定到logger里面去
    
    logger.addHandler(t1)
    logger.addHandler(t2)
    logger.addHandler(sm)
    
     7.设置打印级别
    logger.setLevel(10)  # 控制着全部,先走全部,再走单个的,如果不设置,默认30,必须得设置
    t1.setLevel(20)
    t2.setLevel(30)
    sm.setLevel(40)
    
    
     8.测试
    logger.info('123')
    logger.debug('123')
    logger.warning('123')
    logger.error('123')
    logger.critical('123')
    
  • 相关阅读:
    图像边界扩展
    数据增强之图像旋转及坐标对应(附代码)
    Opencv中的阈值函数
    linux下C++遍历文件夹下的全部文件;Windows/Linux下C++批量修改文件名,批量删除文件
    提取内环图像
    linux中tab键不能补全,却能切换窗口
    Mathtype部分数学符号不能显示,只能显示方框时的解决办法
    Qt运行不出现界面
    直方图处理
    DTCMS自定义标签:面包屑导航,栏目中通过栏目调用名称获得栏目名称
  • 原文地址:https://www.cnblogs.com/zhuyuanying123--/p/11005549.html
Copyright © 2020-2023  润新知