【random、hashlib、subprocess、日志模块】

一、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('我不好!!!')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LoisMay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值