python基础24

发布时间 2023-06-13 16:38:14作者: 初学程序员

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('登录失败')