import hashlib
def get_int():#获取用户指令
print("##欢迎来到xxxx大学##")
print("=====================")
print("1、注册")
print("2、登录")
print("3、退出")
yao = input("请输入密钥:")
while not (yao == '1' or yao == '2' or yao == '3'):
yao= input("错误!请输入正确的指令:")
print("=====================")
return yao
def register():#注册
username = input("请输入用户名")
while shujuku.get(username):
username = input("用户名重复,请重新输入")
password = input("请输入密码")
password = encrypt(password)
shujuku[username] = password
print("注册成功")
def login():#登录
username = input("请输入用户名")
while not(shujuku.get(username)):
username = input("用户不存在,请重新输入")
password = input("请输入密码")
while shujuku.get(username) != encrypt(password):
password = input("密码错误请重新输入")
print("登陆成功")
def encrypt(plaintext):#MD5加密
bstr = bytes(plaintext, "utf-8")
ciphertext = hashlib.md5(bstr).hexdigest().upper()
return ciphertext
shujuku = {}
yao = get_int()
while yao !='3':
if yao == '1':
register()
if yao == '2':
login()
yao = get_int()
简介
本代码是符合登录的简单代码,适合刚学完函数的同学来尝试练习。代码主要应用了四个自定义函数,分别实现获取用户指令,注册,加密,登录。
获取用户指令
def get_int():#获取用户指令
print("##欢迎来到xxxx大学##")
print("=====================")
print("1、注册")
print("2、登录")
print("3、退出")
yao = input("请输入密钥:")
while not (yao == '1' or yao == '2' or yao == '3'):
yao= input("错误!请输入正确的指令:")
print("=====================")
return yao
用一二三来转入代替转入这三个函数里,并判断是否这三个数
注册
def register():#注册
username = input("请输入用户名")
while shujuku.get(username):
username = input("用户名重复,请重新输入")
password = input("请输入密码")
password = encrypt(password)
shujuku[username] = password
print("注册成功")
-
获取用户名:
username = input("请输入用户名:")
使用
input
函数提示用户输入用户名,并将输入的内容存储在变量 username
中。 -
检查用户名是否已存在:
while shujuku.get(username):
print("该用户名已存在。")
username = input("请重新输入用户名:")
这里使用了一个
while
循环来检查数据库
(一个数据库)是否已经包含了用户输入的用户名。如果shujuku.get(username)
返回的不是None
(即用户名已存在),则打印一条消息并再次提示用户输入用户名。循环会继续执行,直到用户输入一个不存在的用户名。 -
获取并加密密码:
password = input("请输入密码:")
password = encrypt(password)
首先,使用
input
函数提示用户输入密码,并将输入的内容存储在变量passworfd
中。然后,调用一个名为encrypt
的函数(加密函数)来加密密码,并将加密后的密码重新赋值给password
变量。 -
将用户名和密码存储到数据库中:
shujuku[username] = password
使用用户提供的用户名(user
name
)作为键,将加密后的密码(password
)存储在 shujuku中。
登录
def login():#登录
username = input("请输入用户名")
while not(shujuku.get(username)):
username = input("用户不存在,请重新输入")
password = input("请输入密码")
while shujuku.get(username) != encrypt(password):
password = input("密码错误请重新输入")
print("登陆成功")
-
使用username = input("请输入用户名")
input
函数提示用户输入用户名,并将输入的用户名存储在变量username
中。 -
while not(shujuku.get(username)):
shujuku.get(username)
尝试从shujuku
中获取与username
关联的值。如果username
不存在,则返回None
(对于字典)或相应的默认值(取决于shujuku
的实现)。 -
如果上面的循环条件为真(即用户名不存在),则再次提示用户输入用户名,并重新赋值给username = input("用户不存在,请重新输入")
username
。 -
当用户名验证通过后,提示用户输入密码,并将输入的密码存储在变量password = input("请输入密码")
password
中。 -
while shujuku.get(username) != encrypt(password):
shujuku.get(username)
获取与用户名username
关联的值,这个值是用户存储在shujuku
中的密码的某种形式(是密码的哈希值)。 -
如果密码验证失败(即上面的循环条件为真),则提示用户重新输入密码,并重新赋值给password = input("密码错误请重新输入")
password
。
加密
def encrypt(plaintext):#MD5加密
bstr = bytes(plaintext, "utf-8")
ciphertext = hashlib.md5(bstr).hexdigest().upper()
return ciphertext
-
将明文转换为字节串:
bstr = bytes(plaintext, "utf-8")
这行代码将传入的明文字符串
plaintext
转换为 UTF-8 编码的字节串bstr
。在 Python 3 中,字符串是 Unicode 类型的,但在进行哈希运算时,通常需要将其转换为字节类型。 -
计算 MD5 哈希值:
ciphertext = hashlib.md5(bstr).hexdigest().upper()
这行代码做了三件事:
- 使用 Python 的
hashlib
模块中的md5
函数来计算字节串bstr
的 MD5 哈希值。这会返回一个哈希对象。 - 调用哈希对象的
hexdigest
方法来获取哈希值的十六进制表示。这个十六进制字符串被赋值给ciphertext
变量。注意这里虽然变量名为ciphertext
,但实际上它存储的是哈希值,而不是加密后的密文。 - supper将哈希值大写
- 使用 Python 的
-
返回哈希值:
return ciphertext
代码主题
shujuku = {}
yao = get_int()
while yao !='3':
if yao == '1':
register()
if yao == '2':
login()
yao = get_int()
本人太菜,主要为笔记,如对你能有帮助就好