hashlib模块:

# 1. 先确定你要使用的加密方式: md系列,sha系列
md5 = hashlib.md5() # 指定加密方式 # 2. 进行明文数据的加密
data = 'hello123456' md5.update(b'hello') # 括号里面加密数据必须是字节类型,bytes类型
md5.update(b'123456') # 括号里面加密数据必须是字节类型,bytes类型 """
1. 被加密的明文数据不管多长,得到的加密串的长度都是固定的
2. 针对md5数据,密文数据能不能倒推出明文数据?
记忆:不能倒推出明文数据 """
# 3. 取出加密结果
print(md5.hexdigest()) # eeb9bad681184779aa6570e402d6ef6 """加密方式的选择"""
"""
1. 被加密的明文数据不管多长,得到的加密串的长度都是固定的
2. 针对md5数据,密文数据能不能倒推出明文数据?
记忆:不能倒推出明文数据 """
# 3. 取出加密结果
print(md5.hexdigest()) # eeb9bad681184779aa6570e402d6ef6c
# eeb9bad681184779aa6570e402d6ef6c
# fc5e038d38a57032085441e7fe7010b0
# fc5e038d38a57032085441e7fe7010b0
# 6adfb183a4a2c94a2f92dab5ade762a47889a5a1
# 936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af
# 97982a5b1414b9078103a1c008c4e3526c27b41cdbcf80790560a40f2a9bf2ed4427ab1428789915ed4b3dc07c454bd9
"""
1. 被加密的数据,密文结果越长代表越难被破解,内部的加密算法越复杂,数据也更安全
被加密出来的结果越长,在发送数据的时候就会占用更多的资源
2. 如何选择加密方式
根据自己项目实际需求选择,一般情况下,md5足够了 """

加盐处理:

# ###############################4.固定加盐(干扰项)处理
# # 1. 先确定你要使用的加密方式: md系列,sha系列
md5 = hashlib.md5() # 指定加密方式 # 2. 进行明文数据的加密
# 2.1 内部在给他添加一个干扰项
random_str = '!@#$%^&dsfsdghdf432534!@#$%%'
data = '123456'
result = random_str + data
md5.update(result.encode('utf-8'))
"""
1. 被加密的明文数据不管多长,得到的加密串的长度都是固定的
2. 针对md5数据,
记忆:不能倒推出明文数据 """
# # 3. 取出加密结果
print(md5.hexdigest()) # eeb9bad681184779aa6570e402d6ef6c ###############################5.动态加盐(干扰项)处理
# 1. 先确定你要使用的加密方式: md系列,sha系列
md5 = hashlib.md5() # 指定加密方式 # 2. 进行明文数据的加密
# 2.1 内部在给他添加一个干扰项
import s
random_str = s.get_code(6) #s.get_code函数参数为6所以是6个随机数
data = '123456'
result = random_str + data #6个随机数加上密码
md5.update(result.encode('utf-8'))
"""
1. 被加密的明文数据不管多长,得到的加密串的长度都是固定的
2. 针对md5数据,密文数据能不能倒推出明文数据?
记忆:不能倒推出明文数据
3. 以后我们在写项目的时候,只要牵涉到用的注册与登录,密码都要加密
"""
# 3. 取出加密结果
print(md5.hexdigest()) # eeb9bad681184779aa6570e402d6ef6c

动态加密案例:

 #注册
new_str = random_str + password #将随机数和密码进行拼接,再进行加盐操作
res = '%s|%s|%s' % (username, new_password, random_str) #将随机到的数字一起添加到文件,random_str为随机数
with open('a.txt', 'w', encoding='utf-8') as f:
f.write(res) #登录
#将登录的密码和读入文件中的随机数进行拼接,然后再进行加盐处理,
#如果加密后的数据和文件里储存的是一样的话则登录成功
new_str = random_s + password
md5.update(new_str.encode('utf-8'))
new_pwd = md5.hexdigest()

日志模块:

'''日志模块的学习,不需要记忆,直接CV'''
# 什么是日志?
日志就是记录你的代码在运行过程中产生的变化
# 日志的级别
'''根据日志级别的不同,选择性的记录'''
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

基本使用:

import logging

# 基本使用
# 产生日志的
file_handler = logging.FileHandler(filename='x1.log', mode='a', encoding='utf-8',) """
2023-03-13 12:06:48 PM - root - ERROR -05 logging模块基本使用: 你好
"""
# 指定日志的格式
logging.basicConfig(
format='%(lineno)d - %(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s - %(pathname)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
handlers=[file_handler,],
level=logging.ERROR
) logging.error('你好') # 10

logging的详细使用:

# 1、定义三种日志输出格式,日志中可能用到的格式化串如下
# %(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用户输出的消息
# 日志的组成部分:
1. logger对象 # 负责产生日志
2. Filter对象 # 过滤的 (忽略)
3. Handler对象 # 负责日志产生的位置
4. Formatter对象 # 负责产生的格式
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',
)
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(10)
# 8.记录日志
logger.debug('写了半天 好累啊 好热啊')

终极使用:配置成字典格式:当成配置文件使用

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' # 日志文件
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
print(BASE_DIR)
log_path = os.path.join(BASE_DIR, 'log') if not os.path.exists(log_path):
os.mkdir(log_path) logfile_path = os.path.join(log_path, 'a3.log') # D:\python25\day22\log\a3.log
# log配置字典
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {}, # 过滤日志
'handlers': {
# 打印到终端的日志
'console': {
'level': 'ERROR',
'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配置 空字符串作为键 能够兼容所有的日志
'xxx': {
'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('好好的 不要浮躁 努力就有收获')

subprocess模块

# windows系统默认的编码格式是:gbk
import subprocess
"""
1. 使用我们自己的电脑去链接别人的电脑 (socket模块)
"""
res=subprocess.Popen('tasklistaaa', shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
) print(res) # <subprocess.Popen object at 0x000001ABB1970310>
# print(res.stdout.read().decode('gbk')) # tasklist执行之后的正确结果返回
print(res.stderr.read().decode('gbk'))

subprocess,哈希,日志模块的更多相关文章

  1. hashlib加密、subprocess、logging日志模块

    1.hashlib加密模块 1.加密:将明文数据处理成密文数据,让人无法看懂 2.为什么加密:保证数据的安全 3.如何判断数据是否加密:如果是一长串没有规律的字符串(数字.字母.符号)那么数据被加密 ...

  2. hashlib加密模块、加密补充说明、subprocess模块、logging日志模块

    目录 hashlib加密模块 加密补充说明 subprocess模块 logging日志模块 日志的组成 日志配置字典 hashlib加密模块 1.何为加密 将明文数据处理成密文数据 让人无法看懂 2 ...

  3. hashlib加密模块 subprocess模块 logging日志模块

    目录 hashlib加密模块 简介 hashlib使用流程 hashilb加密模块使用说明 明文绑定密文 密文长度不变 多次传入 密文不可解密原因 加盐处理(salt) 普通加盐 动态加盐 加密实际运 ...

  4. 常用模块二——hashlib加密模块,subprocess模块,logging日志模块

    一.hashlib加密模块 1.何为加密 将明文数据处理成密文数据 让人无法看懂 2.为什么加密 保证数据的安全 3.如何判断数据是否是加密的 一串没有规律的字符串(数字.字母.符号) 4.密文的长短 ...

  5. hashlib模块、subprocess模块、loggin日志模块及实战

    hashlib加密模块 目录 hashlib加密模块 加密补充说明 subprocess模块 logging日志模块 日志的组成 日志配置字典 配置参数 1.何为加密 将明文数据处理成密文数据 让人无 ...

  6. hashlib 模块 subprocess 模块 logging日志模块

    今日内容 hashlib加密模块 1.何为加密 将明文数据处理成密文数据 让人看不懂 2.为什么加密 保证数据的安全 3.如何判断数据是否加密的 一串没有规律的字符串(数字.字母.符号) 4.密文的长 ...

  7. 日志模块详细介绍 hashlib模块 动态加盐

    目录 一:hashlib模块 二:logging 一:hashlib模块 加密: 将明文数据通过一系列算法变成密文数据(目的就是为了数据的安全) 能够做文件一系列校验 python的hashlib提供 ...

  8. 【腾讯Bugly干货分享】微信mars 的高性能日志模块 xlog

    本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/581c2c46bef1702a2db3ae53 Dev Club 是一个交流移动 ...

  9. Python 日志模块 logging通过配置文件方式使用

    vim logger_config.ini[loggers]keys=root,infoLogger,errorlogger [logger_root]level=DEBUGhandlers=info ...

  10. 搭建一套自己实用的.net架构(2)【日志模块-log4net】

    先谈谈简单的模块,日志.在系统中日志模块是必须的,什么系统日志,操作日志,调试日志.这里用的是log4net. 对log4net还不熟悉的小伙伴们赶快去搜索基础教程哦, 我这里就不温故了. 那么有人要 ...

随机推荐

  1. BinarySearch,逆序排列的数组的二分查找(折半查找),C++非递归+递归实现

    1 // To Compile and Run: g++ binary_search.cc -std=c++11 -Wall -O3 && ./a.out 8 2 3 4 #inclu ...

  2. swing编程

    在界面中放入图片:路径以项目路径为准  img包一般放在项目文件夹下 package adapter;import java.awt.Color;import java.awt.Dimension;i ...

  3. Sql Server新建一个只读权限的用户

    1,新建只能访问某一个表的只读用户. --添加只允许访问指定表的用户: exec sp_addlogin '用户名','密码','默认数据库名' --添加到数据库 exec sp_grantdbacc ...

  4. Using Semaphores in Delphi, Part 2: The Connection Pool

    Abstract: Semaphores are used to coordinate multiple threads and processes. That semaphores provide ...

  5. nodejs 利用URL和querystring获取get查询参数

    为深入理解request的get url信息及参数传递,利用URL和querystring获取对应的信息,测试成功,记录如下: 1.编写server.js文件 http=require("h ...

  6. git练习网站(图形化版)

    https://learngitbranching.js.org/?locale=zh_CN

  7. 【Linux】虚拟机CentOS 7 磁盘扩容

    [Linux]虚拟机CentOS 7 磁盘扩容 在有些时候,自己或者公司开的虚拟机的磁盘在一开始的时候没规划好,或者有磁盘扩容的需求(其实在系统日常运维的时候这个需求时常出现),那么这个时候又该怎么处 ...

  8. 实验五:开源控制器实践——POX

    基本要求 1.tcpdump 验证Hub模块 h1 ping h2的tcpdump抓包结果截图 h1 ping h3的tcpdump抓包结果截图 2.tcpdump 验证Switch模块 h1 pin ...

  9. ls和mkdir

    ls  查看当前目录的内容 1) ls -l 显示详细列表 2) Ls -lh 吧文件大小以人性化的方式展开 3) ls -a 显示所有的文件,包括隐藏文件,隐藏文件是已.开头的文件 4) ll 等于 ...

  10. Apache与tomcat区别--转水漫金山

    Apache与Tomcat都是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可以做为独立的Web服务器运行.Apache是Web服务器而Tomcat是Java应用服务器 Ap ...