python-39-hashlib与logging模块

前言

hashlib与logging模块,前者加密模块,后者为日志模块;

现在的企业公司编程人员一般很多都是用md5加密,但是在Python中hashlib模块中也拥有许多加密算法:

md5(), sha1(), sha224(), sha256(), sha384(), sha512(), blake2b(), blake2s(),
sha3_224, sha3_256, sha3_384, sha3_512, shake_128, and shake_256.

一、初识hashlib模块

1、hashlib:md5加密,提供摘要算法的模块。

  • 不管算法多么不同,摘要的功能始终不变。
  • 对于相同的字符串使用同一个算法进行摘要,得到的值总是不变的。
  • 使用不同算法对相同的字符串进行摘要,得到的值应该不同。
  • 不管使用什么算法,hashlib的方式永远不变。

2、加密有什么作用?

  • 1、密码/身份证号等密文存储
  • 2、文件的一致性验证:
  • --在下载的时候 检查我们下载的文件和远程服务器上的文件是否一致
  • --两台机器上的两个文件 你想检查这两个文件是否相等

二、hashlib模块中md5加密

1、一个md5的加密与读取打印过程:

加密后同一字符串每次打印结果是一样的。

import hashlib
md5=hashlib.md5()
md5.update(b'gsxl')
print(md5.hexdigest())

 2、注册账号与登录账号时的密码加密过程实例:

其实这里呢,就是拿登录时用户输入的密码转为md5加密与存储中的加密密码进行对比。

# 注册账号时加密密码,写入文件
import hashlib
user=input('输入你注册的账号:')
passwd=input('设置你的密码:')
with open(r'G:Python_projectspython_studystudystudy_pythonpython_Basicsuserinfo','a')as f:
    md5=hashlib.md5()
    md5.update(bytes(passwd,encoding='utf-8'))
    f.write(user+'|')
    f.write(md5.hexdigest())
    f.write('
')

# 登录账号时读取密码与输入密码进行对比,正确就登录成功。
user_name=input('登录账号:')
password=input('登录密码:')
use=''
pwd=''
with open(r'G:Python_projectspython_studystudystudy_pythonpython_Basicsuserinfo')as f:
    for i in f:
        i=i.strip()
        use,pwd=i.split('|')
if user_name==use:
    md5=hashlib.md5()
    md5.update(bytes(password,encoding='utf-8'))
    md5_pwd = md5.hexdigest()
    if user_name == use and md5_pwd == pwd:
        print('登录成功')
    else:print('账号或密码错误!')
else:print('账号不存在!')

 3、md5可动静态加盐,提高安全性

# 3、md5可动静态加盐,提高安全性
import hashlib
md5=hashlib.md5(bytes('gsxl',encoding='utf-8')+b'123456')
md5.update(b'123456')
print(md5.hexdigest())

 二、logging日志模块

  • 能够“一键”控制
  • 排错的时候需要打印很多细节来帮助我排错
  • 严重的错误记录下来
  • 有一些用户行为 有没有错都要记录下来

1、logging五个级别:

# 1、logging五个级别:
import logging
logging.debug('debug--低级别')             # 低级别排错信息
logging.info('info--正常信息')             # 正常信息
logging.warning('warning--警告信息')      # 警告信息
logging.error('error--错误信息')          # 错误信息
logging.critical('critical--严重错误')   # 高级别严重错误信息

 2、实例

# 2、实例
# %a, %d %b %Y %H:%M:%S
import logging
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(filename)s'
                           '[line:%(lineno)d] %(levelname)s %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S',)
try:
    int(input('请输入你的密码:'))
except ValueError:
    logging.error('pwd_type error')

 附basicConfig参数与format格式化:

一、logging.  basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:
filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。
filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
format:  指定handler使用的日志显示格式。
datefmt: 指定日期时间格式。
level:   设置rootlogger(后边会讲解具体概念)的日志级别
stream:  用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。

二、format参数中可能用到的格式化串:
%(name)s            Logger的名字
%(levelno)s         数字形式的日志级别
%(levelname)s       文本形式的日志级别
%(pathname)s        调用日志输出函数的模块的完整路径名,可能没有
%(filename)s        调用日志输出函数的模块的文件名
%(module)s          调用日志输出函数的模块名
%(funcName)s        调用日志输出函数的函数名
%(lineno)d          调用日志输出函数的语句所在的代码行
%(created)f         当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d     输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s         字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d          线程ID。可能没有
%(threadName)s      线程名。可能没有
%(process)d         进程ID。可能没有
%(message)s         用户输出的消息

3、定制化logging

# 3、定制化logging
# 能写入中文了
import logging
log = logging.getLogger()                             # 实例化一个对象
f = logging.FileHandler('py.log',encoding='utf-8')    # 文件句柄
h = logging.StreamHandler()                           # 创建一个控制台对象句柄
format_f=logging.Formatter(                           # 输出格式
    '%(asctime)s %(filename)s''[line:%(lineno)d] %(levelname)s %(message)s')
f.setFormatter(format_f)                              # 给f传一个格式化输出对象
h.setFormatter(format_f)                              # 给h传一个格式化输出对象
log.addHandler(f)                                     #
log.addHandler(h)

logging.debug('debug--低级别')             # 低级别排错信息
logging.info('info--正常信息')             # 正常信息
logging.warning('warning--警告信息')       # 警告信息
logging.error('error--错误信息')           # 错误信息
logging.critical('critical--严重错误')     # 高级别严重错误信息

欢迎来大家QQ交流群一起学习:482713805

原文地址:https://www.cnblogs.com/gsxl/p/12544724.html