zoukankan      html  css  js  c++  java
  • Python用户名密码登录系统(MD5加密并存入文件,三次输入错误将被锁定)及对字符串进行凯撒密码加解密操作

    pass.txt

    wrr|0192023a7bbd73250516f069df18b500
    123|a66abb5684c45962d887564f08346e8d
    123|0192023a7bbd73250516f069df18b500
    123|0192023a7bbd73250516f069df18b500
    光标在这一行

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    # @Time    : 2018/5/29 14:16
    # @File    : login_mima.py




    # 用户名密码登录系统(MD5加密并存入文件)及对字符串进行凯撒密码加解密操作

    import hashlib


    def md5(arg):  # 这是加密函数,将传进来的函数加密
        md5_pwd = hashlib.md5(bytes('admin'.encode('utf-8')))
        md5_pwd.update(bytes(arg.encode('utf-8')))
        return md5_pwd.hexdigest()  # 返回加密的数据


    def log(user, pwd):  # 登录时的函数,由于md5不能反解,因此登陆的时候用正解
        with open('pass.txt', 'r') as f:
            for line in f:
                u, p = line.strip().split('|')
                if u == user and p == md5(pwd):  # 登录的时候验证用户名以及加密的密码跟之前保存的是否一样
                    return True


    def register(user, pwd):  # 注册的时候把用户名和加密的密码写进文件,保存起来
        with open('pass.txt', 'a') as f:
            temp = user + '|' + md5(pwd) + ' '
            f.write(temp)


    def encryption():  # 加解密界面
        offset = int(input('~~~~~~~~~~~~~~~~~~~~~~~~~~ '
                           '请输入偏移量: '
                           '大于0小于26:偏移量 '
                           '0:退出登录 '
                           '~~~~~~~~~~~~~~~~~~~~~~~~~~ '))
        if offset in range(1, 25):
            variable = int(input('~~~~~~~~~~~~~~~~~~~~~~~~~~ '
                                 '请选择操作: '
                                 '1:加密 '
                                 '2:解密 '
                                 '~~~~~~~~~~~~~~~~~~~~~~~~~~ '))
            user1 = Caesar(offset, variable)
            user1.choose()
        elif offset == 0:
            print('谢谢使用,再见!')
            exit(0)
        else:
            print('偏移量超出范围,请重新输入!')


    class Caesar:  # 定义类,名叫Caesar
        def __init__(self, offset, variable):  # 初始化
            self.passage = offset
            self.type = variable

        def encrypt(self, offset):  # 加密
            move = (ord(offset) - 97 + self.passage) % 26 + 97  # 用ASCII码值来完成移动,ord()将字符转化为对应ASCII码的十进制数
            return chr(move)  # 将ASCII码转化为对应的数值,chr()将一个整数转化为Unicode字符

        def decrypt(self, offset):  # 解密
            move = (ord(offset) - 97 - self.passage) % 26 + 97
            if move < 97:
                move = move + 26
            return chr(move)

        def choose(self):  # 选择
            str2 = ''
            if self.type == 1:  # 加密时进入
                str1 = input("请输入要加密的字符串('xxx'): ")
                org = str1
                for i in range(len(str1)):  # str1为输入的字符串
                    str1 = str1[:i] + self.encrypt(str1[i]) + str1[i + 1:]
                for i in range(len(str1)):
                    str2 = str2 + str1[i]
                print('字符串' + org + '加密后为:' + str2)
            elif self.type == 2:  # 解密时进入
                str1 = input("请输入要解密的字符串('xxx'): ")
                org = str1
                for i in range(len(str1)):
                    str1 = str1[:i] + self.decrypt(str1[i]) + str1[i + 1:]
                for i in range(len(str1)):
                    str2 = str2 + str1[i]
                print('字符串' + org + '解密后为:' + str2)
            else:
                print('选择错误,请重新输入!')


    class Login:
        def __init__(self, i):
            self.i = i

        def showface(self):
            if self.i == 2:
                user = input("用户名('xxx'):")
                pwd = input("密码('xxx'):")
                register(user, pwd)
            elif self.i == 1:
                count = 1
                while count <= 3:
                    user = user = input("用户名('xxx'):")
                    pwd = input("密码('xxx'):")
                    r = log(user, pwd)  # 验证用户名和密码
                    if r == True:
                        print('登录成功')
                        while True:
                            encryption()
                    else:
                        print('登录失败')
                    count += 1
                    if count == 4:
                        print("密码输入次数过多,账户将被锁定!")
                        exit(0)
                    else:
                        print("还有%d次尝试机会!" % (4 - count))
            elif self.i == 0:
                print('谢谢使用,再见!')
                exit(0)
            else:
                print('输入错误,请重新输入!')


    if __name__ == '__main__':  # 测试程序
        while True:
            i = int(input('~~~~~~~~趣味密码学~~~~~~~ '
                          '0.退出 '
                          '1.登录 '
                          '2.注册 '
                          '~~~~~~~~~~~~~~~~~~~~~~~~ '
                          '请输入您的选择:'))
            pass1 = Login(i)
            pass1.showface()

    结果:

     
    ~~~~~~~~趣味密码学~~~~~~~
    0.退出
    1.登录
    2.注册
    ~~~~~~~~~~~~~~~~~~~~~~~~
    请输入您的选择:2
    用户名('xxx'):'wrr'
    密码('xxx'):'123'
    ~~~~~~~~趣味密码学~~~~~~~
    0.退出
    1.登录
    2.注册
    ~~~~~~~~~~~~~~~~~~~~~~~~
    请输入您的选择:2
    用户名('xxx'):'123'
    密码('xxx'):'123456'
    ~~~~~~~~趣味密码学~~~~~~~
    0.退出
    1.登录
    2.注册
    ~~~~~~~~~~~~~~~~~~~~~~~~
    请输入您的选择:1
    用户名('xxx'):'123'
    密码('xxx'):'123456'
    登录成功
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    请输入偏移量:
    大于0小于26:偏移量
    0:退出登录
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    3
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    请选择操作:
    1:加密
    2:解密
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    1
    请输入要加密的字符串('xxx'):
    'qwert'
    字符串qwert加密后为:tzhuw
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    请输入偏移量:
    大于0小于26:偏移量
    0:退出登录
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    3
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    请选择操作:
    1:加密
    2:解密
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    2
    请输入要解密的字符串('xxx'):
    'tzhuw'
    字符串tzhuw解密后为:qwert
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    请输入偏移量:
    大于0小于26:偏移量
    0:退出登录
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    0
    谢谢使用,再见!
    
    Process finished with exit code 0

    或者:

    ~~~~~~~~趣味密码学~~~~~~~
    0.退出
    1.登录
    2.注册
    ~~~~~~~~~~~~~~~~~~~~~~~~
    请输入您的选择:1
    用户名('xxx'):'wrr'
    密码('xxx'):'123'
    登录成功
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    请输入偏移量:
    大于0小于26:偏移量
    0:退出登录
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    0
    谢谢使用,再见!
    
    Process finished with exit code 0
     

    或者:

     
    
    
    ~~~~~~~~趣味密码学~~~~~~~
    0.退出
    1.登录
    2.注册
    ~~~~~~~~~~~~~~~~~~~~~~~~
    请输入您的选择:1
    用户名('xxx'):'123'
    密码('xxx'):'456'
    登录失败
    还有2次尝试机会!
    用户名('xxx'):'456'
    密码('xxx'):'485'
    登录失败
    还有1次尝试机会!
    用户名('xxx'):'425'
    密码('xxx'):'425552'
    登录失败
    密码输入次数过多,账户将被锁定!
    
    Process finished with exit code 0
     
    
    
     
  • 相关阅读:
    try catch使用示例
    doxgen生成chm文档和乱码解决方法
    MFC中MessageBox()用法
    UML聚合与组合
    C#网络编程
    单元测试(NUnit)
    Autohotkey
    .NET中的并行
    System.Environment类的使用
    一键VHD
  • 原文地址:https://www.cnblogs.com/fmgao-technology/p/9104912.html
Copyright © 2011-2022 走看看