用python寫的模擬系統登入三次驗證簡單程式

清風艾艾發表於2016-11-22

    由於工作需要,最近在學習python,看了網上的python影片教程,有個用python寫的模擬系統登入三次驗證的需求。因本人原來就是開發出身,讓我燃起了寫程式的慾望。

    透過這個簡單的程式,我不僅新認識了一種程式語言,還讓自己學了不少知識,比如:python在列表與字串互轉的過程中,需要注意英文中括號、英文逗號的問題;還有比較詭異的是,在向陣列中append英文逗號時,英文逗號後邊竟然給附加了一個空格;還鍛鍊了自己的邏輯思維,最重要的是自己很享受程式的除錯的過程,儘管程式不重要,但是,看著程式慢慢變長,功能逐漸達到自己的預期,很開心。

    附上程式:

    配置檔案infomation.py:

[account]
username = ['oracle', 'sybase', 'db2', 'mysql', 'dsfasdf', 'e']

[password]
password = ['redhat5', 'hellow', 'haha', 'heihei', 'adsf', 'f']

[islocked]
islocked = ['0', '0', '1', '1', '1', '1']

[islegal]
islegal = ['1', '1', '1', '0', '0', '0']

    主程式檔案user login.py:

# -*- coding: utf-8 -*-:
import ConfigParser
import sys

#定義全域性變數
i = int(0)
username = ''
password = ''
value = []
value1 = []
value3 = []
value4 = []
isLegal = []
islegal_flag = 0
isLocked = []
islocked_flag = 0

#定義讀取配置檔案
conf = ConfigParser.ConfigParser()
myfile = 'C:/Users/localadmin/Desktop/pythonl/infomation.py'
conf.read(myfile)

"""
程式主體:while -- else迴圈
功能:實現模擬系統登入三次驗證,初始狀態時,系統對合法使用者登入三次以內輸入驗證資訊正確可正常登入,
如果合法使用者登入超過三次,合法使用者將被鎖定,以後無法登入,需要管理員修改配置資訊方可後續登入操作,
非法使用者嘗試登入窮舉超過三次,系統將記錄非法使用者資訊,下次非法使用者被嘗試窮舉時將直接拒絕登入。
"""
while i<3:
    #定義登入成功與否標識
    flag = 1
    i = i+1
    #接受使用者名稱和密碼的輸入
    username = raw_input('username:')
    password = raw_input('password:')
    #定義配置檔案的節點名為account,獲取配置檔案中的賬號資訊,進行後續的匹配
    node = 'account'
    #獲取指定節點下的指定key值
    key = conf.options(node)[0]
    #將指定key值對應的資訊按照'號拆分成字元列表,拆分後列表從下標0開始的奇數個元素為有效值
    value = conf.get(node,key).split("'")
    #定義賬號列表編譯變數
    arr_ind = int(0)
    #取賬號列表下標0開始的奇數個元素
    for arr_ind in range(1,len(value),2):
        #對賬號列表下標0開始的奇數個元素與使用者輸入資訊進行比對
        if value[arr_ind] == username:
            node1 = 'password'
            key1 = conf.options(node1)[0]
            #當使用者賬號在配置資訊中存在時,取使用者密碼並拆分成列表,密碼列表與賬號列表相同,相同下標隸屬於同一使用者
            value1 = conf.get(node1,key1).split("'")
            node3 = 'islocked'
            key3 = conf.options(node3)[0]
            # 當使用者賬號在配置資訊中存在時,取使用者鎖定標識並拆分成列表,鎖定標識列表與賬號列表相同,相同下標隸屬於同一使用者
            value3 = conf.get(node3,key3).split("'")
            #定位登入使用者的鎖定列表到指定下標,與賬號列表下標相同
            islocked_flag = int(value3[arr_ind])
            node4 = 'islegal'
            key4 = conf.options(node4)[0]
            # 當使用者賬號在配置資訊中存在時,取使用者合法標識並拆分成列表,合法標識列表與賬號列表相同,相同下標隸屬於同一使用者
            value4 = conf.get(node4,key4).split("'")
            # 定位登入使用者的合法列表到指定下標,與賬號列表下標相同
            islegal_flag = int(value4[arr_ind])
            #登入使用者賬號存在情況下的鎖定狀態判斷,鎖定則直接退出系統,並告知使用者被鎖定,處理方法是聯絡管理員,未鎖定且密碼正確,則成功登入
            if islocked_flag == 1:
                print 'Sorry, your account',username,' is locked ,connect system administrator please!'
                #登入使用者賬號存在情況下的合法性判斷,如果是曾經被用作窮舉攻擊的賬號,直接退出系統併發出警報
                if islegal_flag == 0:
                    print 'Alarm:Check for illegal attacked!!!!'
                sys.exit()
            else:
                if username == value[arr_ind] and password == value1[arr_ind]:
                    print 'Login success,welcome ', username, '!'
                    #修改登入標識並退出for迴圈體
                    flag = 0
                    break
                else:
                    print 'username or password input is error! try again please!'
    #判斷登入標識並退出while迴圈體
    if flag != 1:
        break
else:
    # 使用者嘗試登入超過三次,進行賬號鎖定或對窮舉攻擊資訊記錄
    print 'sorry! login attempts excessive three times, account ',username,' is locked!'
    #定義配置檔案的節點與鍵值資訊
    node = 'account'
    key = 'username'
    node1 = 'password'
    key1 = 'password'
    node3 = 'islocked'
    key3 = 'islocked'
    node4 = 'islegal'
    key4 = 'islegal'
    #獲取賬號、密碼、鎖定狀態、合法狀態並拆分成列表
    value = conf.get(node, key).split("'")
    value1 = conf.get(node1, key1).split("'")
    value3 = conf.get(node3, key3).split("'")
    value4 = conf.get(node4, key4).split("'")
    #去除賬號、密碼、鎖定狀態、合法狀態列表中多餘的左右英文中括號
    value.remove('[')
    value.remove(']')
    value1.remove('[')
    value1.remove(']')
    value3.remove('[')
    value3.remove(']')
    value4.remove('[')
    value4.remove(']')
    #計算賬號、密碼、鎖定狀態、合法狀態列表中的英文逗號個數
    del_times = int(len(value)-1)/2
    #刪除賬號、密碼、鎖定狀態、合法狀態列表中的英文逗號
    for k in range(0,del_times,1):
        print '刪除逗號for迴圈執行第',k,'次!'
        value.remove(', ')
        value1.remove(', ')
        value3.remove(', ')
        value4.remove(', ')
    #鎖定或記錄窮舉攻擊登入資訊,鎖定則修改登入使用者的鎖定狀態為真,窮舉攻擊則記錄登入資訊
    value.append(username)
    print 'value after modified :',value
    islocked_flag = str(1)
    islegal_flag = str(0)
    conf.set(node,key,value)
    value1.append(password)
    conf.set(node1,key1,value1)
    value3.append(islocked_flag)
    conf.set(node3,key3,value3)
    value4.append(islegal_flag)
    conf.set(node4, key4, value4)
    #開啟要回寫的配置檔案
    fn=open(myfile,'w')
    #回寫配置檔案
    conf.write(fn)
    #關閉檔案
    fn.close()

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29357786/viewspace-2128883/,如需轉載,請註明出處,否則將追究法律責任。

相關文章