猫史档案馆


【Python作品分享】加密密码【作业帖】

用户:yh12i31yh12i31查看:0 回复:1 评论:0 创建时间:2022-01-29T22:12:29


【作品展示】

center_image

 

【作品介绍】

此作品通过哈希函数加盐的方法加密了密码

作品是欢迎借鉴和模仿的噢~

 

【作品源代码】

"""
作者:sanjiiiii
bilibili喵1245380903
此作品欢迎借鉴和模仿噢!
"""
"""
此作品通过哈希函数加盐的方法加密了密码,
不信去看看data.txt文件
"""
print("\n如果你觉得哪里写的不好,欢迎批评\n还有此作品如果没有保存,可能会报错哦!\n")
import hashlib

salt = "aoe9srsu92j80"
user = ""
password = ""
# 省略获取用户名和密码的步骤
def get(user_tip, password_tip):
    global user, password
    user = input(user_tip + ":")
    password = input(password_tip + ":")
# 省略哈希时的步骤
def hash(string):
    obj = hashlib.md5()
    obj.update((string).encode("utf-8"))
    return obj.hexdigest()
# 导入到本地数据(就一个普普通通的txt)
def in_password():
    get("你想取什么名字呢", "想一个密码吧")
    # 对密码机密
    hash_password = hash(password) + hash(salt)
    # 导入加密后的密码
    with open("data.txt", "a", encoding="utf-8") as f:
        f.write(f"{user}:{hash_password}\n")
    print("成功导入!")

def out_password():
    get("你的用户名是什么呢", "输入你的密码吧")
    # 获取用户列表和密码列表
    users_list = []
    password_list = []
    # utf-8这里作者踩了坑
    with open("data.txt", "r", encoding="utf-8") as f:
        data = f.read()

    data_list = data.split("\n")
    for i in data_list:
        line_data = i.split(":")
        try:
            users_list.append(line_data[0])
            password_list.append(line_data[1])
        except:
            break

    for i in range(len(users_list)-1):
        if user == users_list[i]:
            now_password = password_list[i]
            hash_salt = hash(salt)
            now_password.replace(now_password[len(now_password)-len(salt)-1:], "")
            now_password = now_password[:len(now_password)-len(hash(password))]
            if hash(password) == now_password:
                print("验证成功!(tips:作者做到这里非常😊😊😊)")

# 这里的第一层 以追加模式创建txt文件 ,避免后面的读取发生报错
with open("data.txt", "a", encoding="utf-8") as f1:
    with open("data.txt", "r", encoding="utf-8") as f2:
        # 如果没有数据,则直接进行注册操作
        if f2.read() == "":
            print("当前没有用户注册,所以让你当第一个用户啦!")
            in_password()
            print("在运行一次试试~~")
        else:
            # 这里的 LOR 变量是“login or register”的缩写(因为不知道怎么写变量名所以就这样写)
            LOR = input("要登陆还是注册? ")
            if LOR == "登录":
                out_password()
            elif LOR == "注册":
                in_password()
                print("在运行一次就可以登录啦~~")
            else:
                print("所以你输了个啥?")

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
EUWEUW

不如我的 https://shequ.codemao.cn/community/1626931

点赞0


评论