一、Random模块
random.random | 返回0~1之间的随机小数(0.3495527147534705) |
---|---|
random.randint(1,9) | 返回1~6之间的随机数字 |
random.choice([‘1’,‘2’]) | 返回随机一个结果(中括号内可以存放多个数据值) |
random.sample([‘1’,‘2’],1) | 随即返回1一个数字值(可以存放多个数据值也可以返回多个数据值) |
random.shuffle(变量名) | 将列表中数据全部打乱 洗牌发牌 |
练习题:编写python代码 产生五位随机验证码(数字、小写字母、大写字母)
import random # 导入模块
def get_code(n): # 定义函数
code = '' # 定义全局变量用于存储所有的验证码
for i in range(n):
# 每次循环都应该产生 数字 小写字母 大写字母
random_int = str(random.randint(0, 9)) # 随机产生一个数字
random_lower = chr(random.randint(97, 122)) # 随机产生一个小写字母
random_upper = chr(random.randint(65, 90)) # 随机产生一个大写字母
# 从上述三个数据值中随机挑选一个作为验证码的一位数据
temp = random.choice([random_int, random_lower, random_upper])
code += temp # 拼接字符串
return code
res = get_code(4) # 想要几位验证码传参即可
print(res)
二、hashlib加密模块
什么是加密?
加密其过程就是把原本可读的数据变成我们看着不知道的过程相当于密码(········)
为什么要加密?
主要目的就是不想让敏感的数据泄露给别人(别人知道你银行卡密码)
如何判断当前数据是否已经加密?
一般情况下如果是一串没有规则的数字字母符合的组合一般都是加密之后的结果(202cb962ac59075b964b07152d234b70)
常见的加密算法
md5 sha hmac base64
代码实参
import hashlib
md5 = hashlib.md5() # 选择md5加密算法作为数据的加密策略
md5.update(b'123') # 往里面添加明文数据 数据必须是bytes类型
print(md5) # <md5 HASH object @ 0x7fd0000c82f0>
res = md5.hexdigest() # 获取加密之后的结果
print(res) # 202cb962ac59075b964b07152d234b70
只要明文数据是一样的那么采用相同的算法得出的密文肯定一样
import hashlib
md5 = hashlib.md5() # 选择md5加密算法作为数据的加密策略
md5.update(b'123') # 往里面添加明文数据 数据必须是bytes类型
md5.update(b'hello') # 往里面添加明文数据 数据必须是bytes类型
md5.update(b'jason') # 往里面添加明文数据 数据必须是bytes类型
res = md5.hexdigest()
print(res) # 31b9a81dc788368469ee4b78877eb1eb
# md5.update(b'123hellojason')
# res = md5.hexdigest()
# print(res) # 31b9a81dc788368469ee4b78877eb1eb
'''如果两次明文数据不一样 则密文也是不一样的'''
加盐处理(salt)
import hashlib
md5 = hashlib.md5() # 选择md5加密算法作为数据的加密策略
password = input('password>>>:').strip() # 获取用户输入的密码
md5.update('设置的盐(干扰项)'.encode('utf8')) # 加盐 解码方式UTF8
md5.update(password.encode('utf8')) # 没加盐的密文 d41d8cd98f00b204e9800998ecf8427e
res = md5.hexdigest()
print(res) # 加盐的密文 30faf565ac9a30b1bb672691776f1185
动态加盐(salt)
干扰项每次都可以不一样(每次获取当前时间 每个用户用户名截取一段)
加密实际应用场景
1.用户密码加密
注册存储密文 登录也是比对密文
2.文件安全性校验
正规的软件程序写完之后做一个内容的加密
压缩文件设置密码对内容加密
3.大文件加密优化
程序文件100G 一般情况下读取100G内容然后加密太慢了
正常不是对所有的内容加密 而是截取一部分加密 (每隔500M读取30Bytes)
三、subprocess模块
'''模拟计算机cmd命令窗口'''
import subprocess
cmd = input('请输入您的指令>>>:').strip()
sub = subprocess.Popen(cmd,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
# stdout执行命令之后正确的返回结果
print(sub.stdout.read().decode('gbk'))
'''输入什么命令就可以直接执行打印出来了'''
四、日志模块
什么是日志?
日志就类似于是历史记录 为了记录事物发生的事实(史官)
日志等级
import logging
logging.debug('debug等级') # 10 小芝麻细皮的事可以不计
logging.info('info等级') # 20 比小芝麻细皮多一点点也可以不计
logging.warning('warning等级') # 默认从warning级别开始记录日志 30
logging.error('error等级') # 40 中等严重的事情
logging.critical('critical等级') # 50 很严重的事情
基本使用
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('我不好!!!')