Python用戶名密碼登錄系統(MD5加密並存入文件,三次輸入錯誤將被鎖定)及對字符串進行凱撒密碼加解密操作


# -*- coding: gb2312 -*-
#用戶名密碼登錄系統(MD5加密並存入文件)及對字符串進行凱撒密碼加解密操作
#作者:凱魯嘎吉 - 博客園 http://www.cnblogs.com/kailugaji/
import hashlib
def md5(arg):#這是加密函數,將傳進來的函數加密
        md5_pwd = hashlib.md5(bytes('admin'))
        md5_pwd.update(bytes(arg))
        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)+'\n'
            f.write(temp)

def encryption(): #加解密界面
        offset=int(input('~~~~~~~~~~~~~~~~~~~~~~~~~~\n'
                         '請輸入偏移量:\n'
                         '大於0小於26:偏移量\n'
                         '0:退出登錄\n'
                         '~~~~~~~~~~~~~~~~~~~~~~~~~~\n'))
        if offset in range(1,25):
            variable=int(input('~~~~~~~~~~~~~~~~~~~~~~~~~~\n'
                               '請選擇操作:\n'
                               '1:加密\n'
                               '2:解密\n'
                               '~~~~~~~~~~~~~~~~~~~~~~~~~~\n'))
            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'):\n")
            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'):\n")
            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('~~~~~~~~趣味密碼學~~~~~~~\n'
                    '0.退出\n'
                    '1.登錄\n'
                    '2.注冊\n'
                    '~~~~~~~~~~~~~~~~~~~~~~~~\n'
                    '請輸入您的選擇:'))
        pass1=Login(i)
        pass1.showface()

結果:

C:\Python27\python.exe D:/Mypython/Myexercise/_kaisa_passage.py
~~~~~~~~趣味密碼學~~~~~~~
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

或者:

C:\Python27\python.exe D:/Mypython/Myexercise/_kaisa_passage.py
~~~~~~~~趣味密碼學~~~~~~~
0.退出
1.登錄
2.注冊
~~~~~~~~~~~~~~~~~~~~~~~~
請輸入您的選擇:1
用戶名('xxx'):'wrr'
密碼('xxx'):'123'
登錄成功
~~~~~~~~~~~~~~~~~~~~~~~~~~
請輸入偏移量:
大於0小於26:偏移量
0:退出登錄
~~~~~~~~~~~~~~~~~~~~~~~~~~
0
謝謝使用,再見!

Process finished with exit code 0

或者:

C:\Python27\python.exe D:/Mypython/Myexercise/_kaisa_passage.py
~~~~~~~~趣味密碼學~~~~~~~
0.退出
1.登錄
2.注冊
~~~~~~~~~~~~~~~~~~~~~~~~
請輸入您的選擇:1
用戶名('xxx'):'123'
密碼('xxx'):'456'
登錄失敗
還有2次嘗試機會!
用戶名('xxx'):'456'
密碼('xxx'):'485'
登錄失敗
還有1次嘗試機會!
用戶名('xxx'):'425'
密碼('xxx'):'425552'
登錄失敗
密碼輸入次數過多,賬戶將被鎖定!

Process finished with exit code 0

pass.txt文件保存結果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM