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')
posted @ 2019-06-11 19:32  enazede  阅读(111)  评论(0编辑  收藏  举报