一: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')