subprocess模块
taklist
1.以后可以用自己的电脑连接上别人的电脑(socket)
2.通过subprocess可以在别人的计算机上执行我们想要的命令
3.把在别人计算机上执行的结果返回过来
import subprocess res = subprocess.Popen('ipconfig', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) print(res.stdout.read().decode('gbk')) print(res.stderr.read().decode('gbk'))
stdout:
存储正确的命令执行结果
stderr:
存储错误的命令执行结果
总结:windows内部默认的是gbk编码
hashlib模块
摘要算法:
又称哈希算法、散列算法。通过一个函数,把任意长度的数据转换为一个固定长度的十六进制数据串
背景:
为了网站安全,一般我们都会给用户密码加密,数据安全性大大提高;
1.用户数据泄露,别人看不到明文密码
2.防止公司内部人员看到用户密码
3. 加密尽量防止密码被破解的可能,做不到完全安全
4.互联网领域没有绝对的安全
加密基本使用
1、选择加密的方式:md系列、sha系列
2、 对数据进行加密
3、获取加密后的结果
import hashlib # 先选择加密方式 ccy_password = hashlib.md5() # 加密数据 ccy_res = 'holle' ccy_password.update(ccy_res.encode('utf8')) # 利用模块里的update方法进行加密 update里面必须是二进制 # 获取加密文件 cmd = ccy_password.hexdigest() print(cmd) # bcecb35d0a12baad472fbe0392bcc043
4、算法一般不能倒推出名问数据
5、不管被加密的数据有多长,加密后的结果长度都是一样的
6、不同的加密方式、长度不一样,加密长度越长,破解难度越大,占用资源也越多
7、一般选用md5的加密方式,sha系列更加难破解,支付到使用的就是sha系列
实战案
while True: user_name = input('请输入你的用户名》》》:').strip() ccy_res = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'lib', 'common') with open(os.path.join(ccy_res, 'aa'), 'r', encoding='utf8') as f: for i in f: if user_name==i.split("|")[0]: print('用户已经存在') break else: user_password = input('请输入你的密码》》》:').strip() # 对密码进行加密,选择加密方式 ccy = hashlib.md5() # 加盐处理 a_password = 'username' # 对文件进行加密 user_password = user_password + a_password ccy.update(user_password.encode('utf8')) # 获取加密文件 new_password = ccy.hexdigest() new_password = new_password[0:16] print(new_password) # 把用户名写入文件 res = '%s|%s\n' % (user_name, new_password) ccy_res = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'lib', 'common') try: with open(ccy_res, 'a', encoding='utf8') as f: f.write(res) except Exception: if not ccy_res: os.makedirs(ccy_res) with open(os.path.join(ccy_res, 'aa'), 'a', encoding='utf8') as f: f.write(res) print('注册成功') break # 登录 import hashlib import os while True: # 请用输入用户名和密码 user_name = input('请输入你的用户名》》》:').strip() user_password = input('请输入你的密码》》》:').strip() # 对密码进行加密,选择加密方式 ccy = hashlib.md5() # 加盐处理 a_password = 'username' user_password = user_password + a_password # 对文件进行加密 ccy.update(user_password.encode('utf8')) # 获取加密文件 new_password = ccy.hexdigest() new_password = new_password[0:16] print(new_password) # 读出文件内容 ccy_res = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'lib', 'common') with open(os.path.join(ccy_res, 'aa'), 'r', encoding='utf8') as f: for i in f: if user_name == i.split('|')[0] and new_password == i.split('|')[1].strip('\n'): print('%s登陆成功' % user_name) break else: print('登录失败')