用户:
熊熊糖果查看:1 回复:2 评论:1 创建时间:2020-07-10T21:40:09
如题,今天我们要讨论的就是如何用Python制作一个不能破解密码的登录注册系统。
那要怎么做呢?别急,且听我慢慢道来![]()
首先,我们需要制作一个简易的登录注册系统。
制作前,我们要学习一下如何保存本地文件。
保存文件的代码格式如下:
data=要写入的内容:字符串格式
with open(文件名:字符串格式,"w")as f:
f.write(data)
举个栗子:
data="test"
with open("test.txt","w")as f:
f.write(data)
保存运行这段代码后,你会发现在程序文件相同目录下出现了一个test.txt的文件,打开后内容是 test
这个就是保存文件的代码。
那打开文件怎么做呢?
其实和刚才的差不多。只需要把代码修改亿点点。
with open(文件名:字符串格式,"r")as f:
data=f.read()
print(data)
继续举第二个栗子:
在运行刚才保存文件的代码后,运行以下代码:
with open("test.txt","r")as f:
data=f.read()
print(data)
会发现控制台输出了一个 test
这个就是打开文件的方法啦!
好了,接下来回归正题,先制作简易的登录注册系统(不带防破解)
代码如下:
login=False #这里是登录状态,可以嵌入到其它代码中使用
uname="" #这里是登录成功的用户名,可以嵌入到其它代码中使用
if input("登录输入1,注册输入0:")=="1":
try:
with open("username.txt","r")as username:
name=username.read()
with open("userpasswd.txt","r")as userpasswd:
passwd=userpasswd.read()
except:
input("你好像还没有注册哦,重开程序输入0进行注册~")
exit()
loginname=input("请输入用户名:")
loginpasswd=input("请输入密码:")
if loginname==name and loginpasswd==passwd:
login=True
uname=loginname
print("登录成功")
else:
input("登录失败,可能是用户名或者密码不正确")
exit()
else:
print("注册会清除原来的账户数据,请注意")
name=input("请输入用户名:")
passwd=input("请输入密码:")
with open("username.txt","w")as username:
username.write(name)
with open("userpasswd.txt","w")as userpasswd:
userpasswd.write(passwd)
input("注册完成,请重启程序登录")
exit()
登录注册的代码写好了,那我们要怎么做到防破解呢?
这就要用到一个加密的方法了。
代码如下:
def createhash(data):
import hashlib #hashlib为Python自带,无需手动安装
md5 = hashlib.md5()
md5.update(data.encode('utf-8'))
return md5.hexdigest()
想必大家也看到了吧,这是一个函数
所以我们可以在需要的时候调用它加密字符,是不是很神奇呢?![]()
这种加密方法用的是md5加密,理论上是不可逆运算的,也就是说不能破解
所以,我们可以在储存密码的时候加密一下。
看到这里,长得帅(
)的小伙伴就会问了:那登录的时候怎么判断密码是否正确呢?![]()
其实很简单,因为这种加密算法加密后的结果是唯一的,所以只需要登录时再次加密就可以判断是否正确了!(hhhc)
所以,接下来防破解的代码如下:
def createhash(data):
import hashlib #hashlib为Python自带,无需手动安装
md5 = hashlib.md5()
md5.update(data.encode('utf-8'))
return md5.hexdigest()
login=False #这里是登录状态,可以嵌入到其它代码中使用
uname="" #这里是登录成功的用户名,可以嵌入到其它代码中使用
if input("登录输入1,注册输入0:")=="1":
try:
with open("username.txt","r")as username:
name=username.read()
with open("userpasswd.txt","r")as userpasswd:
hashpasswd=userpasswd.read()
except:
input("你好像还没有注册哦,重开程序输入0进行注册~")
exit()
loginname=input("请输入用户名:")
loginpasswd=input("请输入密码:")
if loginname==name and createhash(loginpasswd)==hashpasswd:
login=True
uname=loginname
print("登录成功")
else:
input("登录失败,可能是用户名或者密码不正确")
exit()
else:
print("注册会清除原来的账户数据,请注意")
name=input("请输入用户名:")
passwd=input("请输入密码:")
with open("username.txt","w")as username:
username.write(name)
with open("userpasswd.txt","w")as userpasswd:
userpasswd.write(createhash(passwd))
input("注册完成,请重启程序登录")
exit()
用了这个方法后,你在查看userpasswd.txt的时候就会显示已经加密过的密码数据,而不是真实的密码
所以就可以达到防破解的效果啦~