完成注册和登录函数

1、什么是哈希算法(摘要算法)?

对任意长度的消息可以计算得到固定长度的唯一指纹。(通常用16进制的字符串表示)。
常用的哈希算法有哪些?
MD5,SHA1,SHA224,SH256,SHA384,SHA512
哈希算法通常用在什么场景?
数字签名、用户密码管理、文件完整性检查、防止文件被恶意修改

2、什么是MD5算法?什么是“加盐”,为什么要“加盐”?

md5是一种信息摘要算法,它可以从需要加密的数据中按照一定的规则生成一个特殊的字符串,并且一个文件所对应的MD5摘要是固定的,当文件内容变化后,其MD5值也会不一样。
加盐就是向明文中加入随机数
只要明文相同,那么MD5加密后的密文就相同,于是攻击者就可以通过撞库的方式来破解出明文。加盐就是向明文中加入随机数,然后在生成MD5,这样一来即使明文相同,每次生成的MD5码也不同,如此就加大了暴力破解的难度。

3、编写一个用户注册和登录的程序(两个菜单选项),首先用户输入用户名和密码进行注册,注册时判断用户名是否已存在,若已存在提示用户名已存在;判断用户名是否符合规范(由字母开头,由字母数字下划线组成,长度4-20),否则提示用户名不符合规范;将用户名跟输入的密码所对应的MD5值一起储存在文件user.txt中,并提示注册成功。

登录时输入用户名和密码,判断用户名是否存在user.txt中,否则提示用户名不存在。判断输入的密码跟存在文件中的密码是否一致,不一致则提示密码错误。全部正确则提示登录成功。
(请写出用到的知识点,具体步骤,遇到的问题及解决方法,关键语句说明,以及代码及运行结果截图)

用到的知识点:
文件操作,函数,正则表达式,哈希算法

操作步骤:
利用文件的操作打开并获取了文件的内容,用到了python函数的相关知识,分别完成了注册和登录的两个函数,其次用到了正则表达式,检验了用户名的正确与否,再然后导入了hashlib,完成了MD5值的转化并最终存储在文件中。

关键语句说明:
添加的注释。

import re
import hashlib
flag = True  # 循环控制符
def md5(arg):  # md5加密函数,将传进来的函数加密并返回加密的值
    md5_pwd = hashlib.md5(bytes('admin'.encode('utf-8')))
    md5_pwd.update(bytes(arg.encode('utf-8')))
    return md5_pwd.hexdigest()  # 返回加密的数据
def zhuce():
    f = open('user.txt', 'r')  # 打开已存在用户的文件,假设文件已经存在
    flag = True
    name = f.readlines()
    f.close()
    while flag:
        username = input('username:')
        check = re.compile("^[a-zA-Z]{1}([a-zA-Z0-9 ]){3,19}$")
        if check.match(username):
            sign = False  # 用户名已存在的标记符
            for line in name:
                if ( md5(username) == line.split('*')[0]):
                    sign = True
                    print('用户名已存在,请重新输入')
            if sign != True:
                f = open('user.txt', 'a')  #注册新的用户
                f.write(md5(username))
                f.write('*')
                password = input('password:')
                f.write(md5(password))
                f.write('*')
                f.write('\n')
                f.close()
                print('注册成功')
                break
        else:
            print('用户名不符合规范')
def denglu():  # 登录函数
    f = open('user.txt', 'r')
    flag = True
    name = f.readlines()
    f.close()
    i=0
    user = input('输入用户名:')
    for line in name:
        if (md5(user) == line.split('*')[0]):
            print('用户名正确')
            pwd = input('输入密码:')
            if md5(pwd) == line.split('*')[1]:
                print('密码正确,登录成功')
            else:
                print('密码错误')
        else:
            i += 1
            if len(name)==i:
                print('用户名不存在')
                break


info = '''
------请输入相关数字-----
1.创建新的用户
2.登陆已有用户
(其他任意键退出菜单)
'''
while flag:
    print(info)
    i = input()
    if i == '1':
        zhuce()
    elif i=='2':
        denglu()
    else :
        exit()




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值