hashlib加密模块 logging日志模块

day22 hashlib加密模块  logging日志模块

 

hashlib加密模块

理解什么是加密?   

将明文(人看得懂)数据通过一些手段变成密文数据(人看不懂)
密文数据的表现形式一般都是一串没有规则的字符串

  

加密算法

加密算法>>>(将明文变密文的内部规则)

 算法的难易程度可以根据产生密文的长短来判断 越长意味着算法越复杂

在传入数据的时候 只要内容一致 那么算法的结果肯定一致

加密之后的结果是无法直接反解密的

市面上所谓的反解密其实是暴力破解>>>:本质上是自己模拟一些密码组合进行加密 打包后进行比对 反复的猜

为了防止被被暴力破解 我们可以增加破解的难难度>>>进行加盐处理

  

加密模块的使用场景

涉及到隐私数据的时候 应该考虑使用加密
  	最为常见的就是对用户的密码加密 防止密码泄露 还可以对文件做对比

1.密码加密如何比对
	用户输入的是明文 到了程序里面之后会采用相同的加密算法变成密文
	之后拿着密文与跟数据库里面的密文比对 如果一致就是密码正确 不一致就是错误
	
2.文件内容一致性校验
	作为软件的提供者 我们在提供安全软件的同时会对给该软件内容做加密处理 得到一个该安全软件独有的密文
	用户在下载软件之后也会对内容做相同的加密  比对两次密文是否一致
	如果秘闻是相同 表示中途没有被修改 如果不是 表示中途被修改过 可能存在病毒 

针对大文件一致性校验的优化策略
	如果一个文件有10G 那么如果全部读取并加密速度太慢
  这个时候可以考虑对文件内容进行切片读取并加密的操作

  

代码演示

import hashlib  # 导入 hashlib模块
# 1.指定算法>>>:md5算法(最为常见 一般的业务需求足够了)
md5 = hashlib.md5()
# 2.将明文数据传递给算法对象 转换成bytes类型 进行加密
md5.update(b'shopping')  # 只能接收bytes类型
# """如果字符串中是纯数字和英文 那么直接在前面加b转成bytes类型"""
# 3.获取加密之后的密文数据
res = md5.hexdigest()
print(res)  # b2fe440cb7a0b127f1a90ffea296313b

 

针对一些大文件 可以使用分段调用

md5 = hashlib.md5()
md5.update(b'go')
md5.update(b'to')
md5.update(b'shopping')
print(md5.hexdigest())  # a4b3a9b699c474c0bc4dcbec0a6e9fe5
md5.update(b'gotoshopping')
print(md5.hexdigest())  # a4b3a9b699c474c0bc4dcbec0a6e9fe5
"""
分段调用不影响密文计算结果
"""

  

加盐处理

动态加盐

干扰项动态变化  进一步增加难度
可以是用户名的一部分 也可以当前时间...


#代码示例

import hashlib  # 导入 hashlib模块

md5 = hashlib.md5()  # 调用md5算法
# 加盐处理(添加一些额外的干扰项)
md5.update('你猜呀'.encode('utf8'))
md5.update(b'666')
print(md5.hexdigest())  # 887654cb80fcbbbc332ebf9aaa67e8a3

   

logging日志模块

简介

日志模块就是在程序的各个环境记录日志  便于后续的查看 
日志按照重要程度分成五个等级 等级不同记录的内容不同 你可以自行设置输出日记级别

  

日志等级

import logging
# 日志按照重要程度分为五个级别:默认只有达到warning警告级别及以上才会记录日志
logging.debug('debug message')  # 10级 所有的事情都记录
logging.info('info message')  # 20级  记一些常规的事情
logging.warning('warning message')  # 30级  可能要出错了
logging.error('error message')  # 40级 报错啦
logging.critical('critical message')  # 50级 可能要崩溃了

  

logging基本使用

# logging配置

import logging

file_handler = logging.FileHandler(filename='x1.log', mode='a', encoding='utf-8', )
# 所有的格式不需要记忆 后续几乎都是拷贝加修改
logging.basicConfig(
    format='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S %p',
    handlers=[file_handler, ],
    level=logging.ERROR
  )

logging.error('少熬夜 注意身体')

  

 

posted @ 2022-04-04 21:56  ji哩咕噜  阅读(34)  评论(0编辑  收藏  举报