一: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 pwdif __name__=='__main__': hash_pwd='0562b36c3c5a3925dbe3c4d32a4f2ba2' pwd=break_pwd(hash_pwd) print('这人的密码是:',pwd)
加盐处理
import hmacm=hmac.new(b'123') #加盐处理m.update(b'123')print(m.hexdigest()) # a31dce88633f3393f6c475525ff48301m.update(b'456')print(m.hexdigest()) # a31dce88633f3393f6c475525ff48301m=hmac.new(b'123')m.update(b'123456')print(m.hexdigest()) #a31dce88633f3393f6c475525ff48301m=hmac.new(b'456')m.update(b'123456')print(m.hexdigest()) ## 036891f8964d543c01f4718280d5853em=hmac.new(b'123123456')print(m.hexdigest()) ## 643e0c01cbc74229a8c29128b8634287
import uuidfor 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')