一:hashlib模块

加密:
将明文数据通过一系列算法变成密文数据(目的就是为了数据的安全) 能够做文件一系列校验
python的hashlib提供了常见的摘要算法, 如MDS,SHA1等等。 什么是摘要算法呢?
摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示) 加密模块的应用
加密为了保证数据的安全
本质就是将明文变成密文
加密算法 常用: md系列 sha系列 basa系列 hmac系列 hashlib模块
import hashlib
1.先确定算法类型(md5普遍使用)
md5 = hashlib.md5()
2.将明文数据传递给md5算法(update只能接受bytes类型数据)
需要编码
只有英文数字或:(b'hello 123')
md5.update('123'.encode('utf8'))
3.获取加密之后的密文数据
res = md5.hexdigest()
print(res)
加密后数据:202cb962ac59075b964b07152d234b70 明文数据只要是相同的 那么无论如何传递加密结果肯定是一样的
1.加密之后的密文数据是没有办法反解密成明文数据的
解密只能pc:你只能把这一串随机字符串内部的算法,只能从头往后推,不能从后往推 注:市面上所谓的破解 其实就是提前算出一系列明文对应的密文之后比对密文再获取明文

1.hasglib模块 sha256类型

hashlib模块
import hashlib
1.先确定算法类型(sha256)
md5 = hashlib.sha256()
2.将明文数据传递给md5算法(update只能接受bytes类型数据)
需要编码
只有英文数字或:(b'hello 123')
md5.update('123'.encode('utf8'))
3.获取加密之后的密文数据
res = md5.hexdigest()
print(res)
加密算法越长代表越复杂 越难破解
密文数据越长表示内部对应的算法越复杂
加密后数据:a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 '''
密文越长表示算法越复杂 对应的破解算法的难度越高
但是越复杂的算法所需要消耗的资源也就越多 密文越长基于网络发送需要占据的数据也就越大
具体使用什么算法取决于项目的要求 一般情况下md5足够了
'''

2.hashlib模块 加盐处理

涉及到用户密码存储 其实都是密文 只要用户自己知道明文是什么

1.内部程序员无法得知明文数据
2.数据泄露也无法得知明文数据 加盐处理
hashlib模块
import hashlib
1.先确定算法类型(md5)
md5 = hashlib.md5()
2.将明文数据传递给md5算法(update只能接受bytes类型数据)
需要编码
只有英文数字或:(b'hello 123')
加盐 (干扰项)
md5.update('公司内部自己定义的盐'.encode('utf8'))
用户真实数据添加
md5.update('123'.encode('utf8'))
3.获取加密之后的密文数据
res = md5.hexdigest()
print(res) '''
在对明文数据做加密处理过程前添加一些干扰项
这个结果对应的明文,不单单含有密码了,还有干扰项,就算别人把密码猜到了,它也不知道真实的密码是什么
'''

3.hashlib模块 动态 加盐

动态加盐
hashlib模块
import hashlib
1.先确定算法类型(md5)
md5 = hashlib.md5()
2.将明文数据传递给md5算法(update只能接受bytes类型数据)
需要编码
只有英文数字或:(b'hello 123')
动态加盐 (干扰项) 当前时间 用户名的部分 uuid(随机字符串(永远不会重复))
导入内置模块
import time
字符串转换时间 时间动态相当是一个盐 随着时间的流动得出
res = str(time.time())
md5.update(res.encode('utf8'))
用户真实数据添加
md5.update(b'123jason')
3.获取加密之后的密文数据
res = md5.hexdigest()
print(res) '''
在对明文数据做加密处理过程前添加一些变化的干扰项
'''

4.效验文件是否一致 (电脑下载 黑客篡改攻略)

"""
在IT互联网领域 没有绝对的安全可言 只有更安全
原因在于互联网的本质 就是通过网线(网卡)连接计算机
""" 效验文件是否一致
文件对应着密文 当我电脑下载文件得时候 文件会一并把密文一起给我
然后电脑在底层会自动把刚刚下载得文件 文件会告诉我用什么算法算得,
电脑会把这个文件内容在基于文件之前得算法在添加得出一个密文
用电脑自己算出来得密文跟文件的密文做对比 是否一致
如果是一致 没风险 如果不一致说明被文件内容被篡改 这时计算机会提示 '''
文件不是很大的情况下 可以将所有文件内部全部加密处理
但是如果文件特别大 全部加密处理相当的耗时耗资源'''
针对大文件可以使用切片读取的方式 我只读某一些字符部分 import os
读取文件总大小
res = os.path.getsize(r'sss.txt')
指定分片读取策略 (读几段 每段几个字符)
指定分片读取策略(读几段 每段几个字节) 10 f.seek()
read_method = [0, res//4, res//2, res] import hashlib
先确定算法类型(md5普遍使用)
md5 = hashlib.md5() 读取 加密
rb支持所有类型 二进制类型
with open(r'sss.txt', 'rb') as f:
for line in f:
md5.update(line)
# 得到真实的密文数据
real_data = md5.hexdigest()
print(real_data)
结果:03dfc195680b71bdb0c4aacfbb1757f0 黑客修改数据后
with open(r'sss.txt', 'rb') as f:
for line in f:
md5.update(line)
得到真实的密文数据
error_data = md5.hexdigest()
print(error_data)
结果:4fb9e8e7fa939672f55bc8146457fbac 摘要算法其实是很常见的
摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。 摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

二:logging

知识点很多 但是需要掌握的很少(会用即可)
impotr logging 日志有五个等级(从上往下重要程度不一样)
logging.debug('debug级别') 10
logging.info('info级别') 20
logging.warning('warning级别') 30
logging.error('error级别') 40
logging.critical('critical级别') 50
'''默认记录的级别在30及以上''' 简单使用
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('日志模块很好学 不要自己吓自己')
"""
1.如何控制日志输入的位置
想在文件和终端中同时打印
2.不同位置如何做到不同的日志格式
文件详细一些 终端简单一些
"""

1.日志模块详细介绍

import logging

 1.logger对象:负责产生日志
logger = logging.getLogger('转账记录')
2.filter对象:负责过滤日志(直接忽略)
3.handler对象:负责日志产生的位置
hd1 = logging.FileHandler('a1.log',encoding='utf8') # 产生到文件的
hd2 = logging.FileHandler('a2.log',encoding='utf8') # 产生到文件的
hd3 = logging.StreamHandler() # 产生在终端的
4.formatter对象:负责日志的格式
fm1 = logging.Formatter(
fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
)
fm2 = logging.Formatter(
fmt='%(asctime)s - %(name)s %(message)s',
datefmt='%Y-%m-%d',
)
5.绑定handler对象
logger.addHandler(hd1)
logger.addHandler(hd2)
logger.addHandler(hd3)
6.绑定formatter对象
hd1.setFormatter(fm1)
hd2.setFormatter(fm2)
hd3.setFormatter(fm1)
7.设置日志等级
logger.setLevel(30)
8.记录日志
logger.debug('写了半天 好累啊 好热啊')

2.配置字典

 核心就在于CV
import logging
import logging.config standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
'[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字 simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s' logfile_path = 'a3.log'
log配置字典
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {}, 过滤日志
'handlers': {
#打印到终端的日志
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', 打印到屏幕
'formatter': 'simple'
},
打印到文件的日志,收集info及以上的日志
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', 保存到文件
'formatter': 'standard',
'filename': logfile_path, 日志文件
'maxBytes': 1024*1024*5, 日志大小 5M
'backupCount': 5,
'encoding': 'utf-8', 日志文件的编码,再也不用担心中文log乱码了
},
},
'loggers': {
logging.getLogger(__name__)拿到的logger配置 空字符串作为键 能够兼容所有的日志
'': {
'handlers': ['default', 'console'], 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'level': 'DEBUG',
'propagate': True, 向上(更高level的logger)传递
}, 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
},
} 使用配置字典
logging.config.dictConfig(LOGGING_DIC) 自动加载字典中的配置
logger1 = logging.getLogger('xxx')
logger1.debug('好好的 不要浮躁 努力就有收获')

日志模块详细介绍 hashlib模块 动态加盐的更多相关文章

  1. request 模块详细介绍

    request 模块详细介绍 request Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装 ...

  2. hashlib 文件校验,MD5动态加盐返回加密后字符

    hashlib 文件校验 # for循环校验 import hashlib def check_md5(file): ret = hashlib.md5() with open(file, mode= ...

  3. 『心善渊』Selenium3.0基础 — 24、Selenium的expected_conditions模块详细介绍

    目录 1.EC模块介绍 2.EC模块常用类 3.EC模块的使用 4.EC模块综合使用 (1)title_is(title)示例 (2)presence_of_element_located(locat ...

  4. django-Auth模块(详细介绍)

    转载自https://www.cnblogs.com/liuqingzheng/articles/9628105.html 1 Auth模块是什么 Auth模块是Django自带的用户认证模块: 我们 ...

  5. python正则表达式re模块详细介绍

    转自:http://www.jb51.net/article/50511.htm 本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以是Unicode字符,这 ...

  6. python正则表达式re模块详细介绍--转载

    本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以是Unicode字符,这点不用担心,python会处理地和Ascii字符一样漂亮. 正则表达式使用反斜杆( ...

  7. Python中re模块详细介绍

    正则的介绍及应用实例详解 """ 1.什么是正则 正则就是用一系列具有特殊含义的字符组成一套规则,该规则用来描述具有某一特征的字符串, 正则就是用来去一个大的字符串中匹配 ...

  8. python模块学习之hashlib模块学习

    # 加密模块 import hashlib # md5 加密 md5 # 1.初始化md5模块 生成md5对象 # 2.引入要加密的数据 update # 3.获取加密值 hexdigest m = ...

  9. MongoDB中4种日志的详细介绍

    前言 任何一种数据库都有各种各样的日志,MongoDB也不例外.MongoDB中有4种日志,分别是系统日志.Journal日志.oplog主从日志.慢查询日志等.这些日志记录着MongoDB数据库不同 ...

随机推荐

  1. 【LeetCode】657. Robot Return to Origin 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 复数求和 counter统计次数 相似题目 参考资料 ...

  2. 【LeetCode】Pascal's Triangle II 解题报告

    [LeetCode]Pascal's Triangle II 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/pascals-tr ...

  3. 【LeetCode】160. Intersection of Two Linked Lists 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 双指针 栈 日期 题目地址:https://leet ...

  4. 【LeetCode】583. Delete Operation for Two Strings 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  5. SQL 行转列===列转行

    行转列:sum+if 在长表的数据组织结构中,同一uid对应了多行,即每门课程一条记录,对应一组分数,而在宽表中需要将其变成同一uid下仅对应一行 在长表中,仅有一列记录了课程成绩,但在宽表中则每门课 ...

  6. 【HTML响应式项目】成人教育官网前端页面(HTML+CSS+JS实现三端适应)

    这个页面是在校参赛的小组项目,除首页和所有课程页面以外由组内成员编写,发博客纯属记录. 项目源码已上传至码云仓库:https://gitee.com/ynavc/sss 项目演示地址:http://y ...

  7. Layui 的内置jquery 版本

    //layui-v2.4.5 的内置jquery 版本. console.log(layui.$.fn.jquery);//=> 1.12.3 可以使用内置jq的方法: 方法一: layui.u ...

  8. Java中两个或多个byte数组合并及int类型转数组

    Java中两个或多个byte数组合并及int类型转数组 // 用list好处是可以未知多个? public static byte[] test(List<byte[]> values) ...

  9. Hangfire任务调度框架使用

    1.HangFire简介 HangFire是一个免费简单实用的分布式后台定时调度服务,在现在.net开发中,人气算是很高的. HangFire提供了内置集成化的控制台,可以直观明了的查看作业调度情况, ...

  10. 深入 Laravel 内核之装饰模式

    装饰模式核心内容: 装饰模式可以在不影响组件对象的情况下,以动态.透明的方式从外部给对象添加功能: 装饰器模式的本质就是动态组合.动态是手段,组合是目的.装饰模式是通过把复杂的功能简单化.分散化,在运 ...