猫史档案馆


【教程贴】用Python制作一个登录注册系统?别人还破解不了密码

用户:熊熊糖果熊熊糖果查看:1 回复:2 评论:1 创建时间:2020-07-10T21:40:09


如题,今天我们要讨论的就是如何用Python制作一个不能破解密码的登录注册系统。

那要怎么做呢?别急,且听我慢慢道来emotion_doge

 

首先,我们需要制作一个简易的登录注册系统。

制作前,我们要学习一下如何保存本地文件。

保存文件的代码格式如下:

data=要写入的内容:字符串格式
with open(文件名:字符串格式,"w")as f:
    f.write(data)

举个栗子:

data="test"
with open("test.txt","w")as f:
    f.write(data)

保存运行这段代码后,你会发现在程序文件相同目录下出现了一个test.txt的文件,打开后内容是 test

这个就是保存文件的代码。

那打开文件怎么做呢?emotion_雷电猴_举手

其实和刚才的差不多。只需要把代码修改亿点点。

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()

想必大家也看到了吧,这是一个函数

所以我们可以在需要的时候调用它加密字符,是不是很神奇呢?emotion_doge

这种加密方法用的是md5加密,理论上是不可逆运算的,也就是说不能破解

所以,我们可以在储存密码的时候加密一下。

看到这里,长得帅(emotion_doge)的小伙伴就会问了:那登录的时候怎么判断密码是否正确呢?emotion_雷电猴_疑问

其实很简单,因为这种加密算法加密后的结果是唯一的,所以只需要登录时再次加密就可以判断是否正确了!(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的时候就会显示已经加密过的密码数据,而不是真实的密码

所以就可以达到防破解的效果啦~

 


回复

上一页1 页 / 共 1下一页
熊熊糖果熊熊糖果

因为"m d5"这个词中含有敏感词"m d"所以会变成"喵5",请自行替换使用

点赞0


评论


白篮白篮

直接用哈希的话会少很多行

点赞0


评论