天天看點

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

    由于工作需要,最近在學習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!'

    #定義配置檔案的節點與鍵值資訊

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