一: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】1465. 切割后面积最大的蛋糕 Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 找最大间隔之积 日期 题目地址:https://lee ...

  2. 【LeetCode】784. Letter Case Permutation 解题报告 (Python&C++)

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

  3. 【LeetCode】17. Letter Combinations of a Phone Number 电话号码的字母组合

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:电话号码, 字母组合,回溯法,题解,leetcode, ...

  4. 记一次引入Elasticsearch的系统架构实战

    前言 我曾经面试安踏的技术岗,当时面试官问了我一个问题:如果你想使用某个新技术但是领导不愿意,你怎么办? 对于该问题我相信大家就算没有面试被问到过,现实工作中同事之间的合作也会遇到. 因此从我的角度重 ...

  5. 带你熟悉鸿蒙轻内核Kconfig使用指南

    摘要:本文介绍了Kconfig的基础知识,和鸿蒙轻内核的图形化配置及进阶的使用方法. 本文分享自华为云社区<鸿蒙轻内核Kconfig使用笔记>,作者: zhushy. 1. Kconfig ...

  6. HDU 4790:Just Random(容斥)

    Just Random Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...

  7. 【操作系统】bat文件 系统找不到文件路径

    我直接使用bat文件发现我要删除的文件夹还在 在bat文件最后添加pause指令查看发现报错:系统找不到文件路径 原因:路径包括中文,显示乱码(因为txt另存为bat时用量utf-8编码) 解决方法: ...

  8. 图片 Augmentation整理

    目录 Augmentation Flipping 翻转 Grayscale Equalize 均衡直方图 Posterize 减少颜色通道位数 Cropping Rotation Translatio ...

  9. Java中关于super关键字的作用

    在子类继承父类中,一般有一行super的语句,需要记住三种使用方法: 1.super.变量/对象名: 使用这种方法可以直接访问父类中的变量或对象,进行修改赋值等操作 2.super.方法名(): 直接 ...

  10. Java_Swing中关于关闭窗口的方法

    注意:在继承Jframe的过程中,由于工具的快捷功能可以会继承到Frame类,继承到Jframe类打开的窗口默认是可以关闭的,而Frame类打开的窗口点了关闭的没有反应的. 1.关闭子窗口后,父窗口也 ...