MD5加密

MD5消息摘要算法(MD5 Message-Digest Algorithm)是⼀种不可逆的加密算法,它是可靠的,并且安全的(关于MD5加密这一块这里不多做介绍,后面会另外写博客介绍加密/解密这一块的)。在python中我们不需要⼿写这⼀套算法,只需要引入⼀个叫hashlib的模块就能搞定MD5的加密⼯作:

import hashlib

obj = hashlib.md5()                 # 返回一额hash对象
obj.update(\"alex\".encode(\"utf-8\")) # 加密的必须是字节
miwen = obj.hexdigest()
print(miwen)                       # 534b44a19bf18d20b71ecc4eb77c572f

这样加密一串字符真的安全吗,我们在网上有很多在线解密MD5的工具,这个这个字符串放到那些网站上一解密就出来了,如下图:

那么这是为什么呢,这是因为MD5存在的历史悠久,很多字符已经被加密记录到一个库中了,这种所谓的解密就是再这个库中查找记录,如果找到了就成为解密成功,那我们应该怎么避免这种问题呢,其实很简单,我们在生成hash对象时加点盐(salt)就OK了:

import hashlib

obj = hashlib.md5(b\'sjfqwjbekwjbckwo23o920fl2\')
obj.update(\"alex\".encode(\"utf-8\"))
miwen = obj.hexdigest()
print(miwen)                        # 19c7d5410eda9452205f6b59e8ba2c33  
                                    # 这时候在拿去解密他就解密不了了

日志(logging模块)

logging模块的使用方法:

  • 导入logging模块
  • 简单配置⼀下logging
  • 出现异常的时候(except). 向⽇志⾥写错误信息.

logging模块的简单使用:

# filename: ⽂件名
# format: 数据的格式化输出. 最终在⽇志⽂件中的样⼦
# 时间-名称-级别-模块: 错误信息
# datefmt: 时间的格式
# level: 错误的级别权重, 当错误的级别权重⼤于等于leval的时候才会写⼊⽂件
logging.basicConfig(filename=\'x1.txt\',format=\'%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s\',
                datefmt=\'%Y-%m-%d %H:%M:%S\',level=30)    # 当前配置表示30以上的分数会被写⼊⽂件
# CRITICAL = 50
# FATAL = CRITICAL
# ERROR = 40
# WARNING = 30
# WARN = WARNING
# INFO = 20
# DEBUG = 10
# NOTSET = 0
logging.critical(\"我是critical\") # 50分. 最贵的
logging.error(\"我是error\") # 40分logging.warning(\"我是警告\") # 警告 30
logging.info(\"我是基本信息\") # 20
logging.debug(\"我是调试\") # 10
logging.log(2, \"我是⾃定义\") # ⾃定义. 看着给分

最后, 如果你系统中想要把⽇志⽂件分开,比如,⼀个⼤项⽬,有两个⼦系统,那两个⼦系统要分开记录⽇志,⽅便调试,那怎么办呢?注意,⽤上⾯的basicConfig是搞不定的,我们要借助⽂件助⼿(FileHandler),来帮我们完成⽇志的分开记录;这里如果要修改日志的文件编码格式也是在这里改的:

import logging
# 创建⼀个操作⽇志的对象logger(依赖FileHandler)
file_handler = logging.FileHandler(\'l1.log\', \'a\', encoding=\'utf-8\')
file_handler.setFormatter(logging.Formatter(fmt=\"%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s\"))
logger1 = logging.Logger(\'s1\', level=logging.ERROR)
logger1.addHandler(file_handler)
logger1.error(\'我是A系统\')


# 再创建⼀个操作⽇志的对象logger(依赖FileHandler)
file_handler2 = logging.FileHandler(\'l2.log\', \'a\', encoding=\'utf-8\')
file_handler2.setFormatter(logging.Formatter(fmt=\"%(asctime)s - %(name)s -%(levelname)s -%(module)s: %(message)s\"))
logger2 = logging.Logger(\'s2\', level=logging.ERROR)
logger2.addHandler(file_handler2)
logger2.error(\'我是B系统\')
收藏 打印