python之hashlib模塊(MD5校驗)


 示例:大文件md5校驗

def md5(fileMd5):
    import hashlib
    md5_value = hashlib.md5()
    with open(fileMd5,'rb') as f:
        while True:
       #每次讀取2048個字節數據 data
= f.read(2048) if not data: brea
       #計算md5值 md5_value.update(data) return md5_value.hexdigest()

 示例:密碼加密

本例我一個登錄驗證的裝飾器

#!/usr/bin/env python
#-*- coding:utf-8 -*-
"""
功能:
    登錄驗證模塊
詳細說明:
    1.密碼文件為passwd
    2.passwd未創建或丟失,會提示:密碼文件不存在,建議重新注冊!!
    3.未注冊用戶登錄會提示:用戶名不存在,請您先進行注冊!
    4.已注冊用戶登錄時,忘記密碼,嘗試3次后密碼還不正確則退出驗證,等一會兒則可以重新登錄
    5.作為裝飾器進行登錄驗證
"""
import json
import hashlib
import os
pwd = os.getcwd()
fileName = os.path.join(pwd,"passwd")

#將明文密碼通過md5進行加密,返回一個加密后的md5的值
def calc_md5(passwd):
    md5 = hashlib.md5("haliluya")
    md5.update(passwd)
    ret = md5.hexdigest()
    return ret


#新用戶注冊模塊
def register():
    #判斷密碼文件passwd是否存在,存在則載入列表,不存在就重新創建一個空字典
    if os.path.exists(fileName):
        #載入用戶列表,數據結構為字典,k=userName,v=passwdMd5
        with open("passwd", "r+") as loadsFn:
            userDB = json.loads(loadsFn.read())
    else:
        userDB = {}
    #讓用戶輸入用戶名
    userName = raw_input("姓名:")
    #標志位:控制循環跳出
    flag = True
    while flag:
        #用戶注冊時,需輸入兩次密碼
        passwd1 = raw_input("密碼:")
        passwd2 = raw_input("確認密碼:")
        #如果兩次密碼不一致,則不執行下一步,再次輸入密碼並進行確認
        if not passwd1 == passwd2:
            continue
        else:
            #兩次輸入密碼一致,標志位置為False,下次跳出循環
            flag = False
        #調用calc_md5函數將明文密碼轉為對應的md5值,用於保存
        passwdMd5 = calc_md5(passwd1)
    #將用戶名與密碼對應存入字典userDB中
    userDB[userName] = passwdMd5
    #將用戶名和密碼存入文件
    with open(fileName, "w") as dumpFn:
        dumpFn.write(json.dumps(userDB))


#用戶登錄驗證,裝飾器
def login(func):
    def decorater(*args,**kwargs):
        #判斷passwd文件是否存在,存在則載入userDB(用戶:密碼),否則就重新注冊新的passwd文件並返回
        if os.path.exists(fileName):
            with open("passwd", "r+") as loadsFn:
                userDB = json.loads(loadsFn.read())
        else:
            print "密碼文件不存在,建議重新注冊!!"
            register()
            return

        name = raw_input("用戶名:")
        #用戶名是否存在,存在就繼續輸入密碼,不存在則進行注冊
        if name in userDB.keys():
            flag = True
            counter = 0
            #循環輸入密碼,密碼正確,flag=False(下次直接跳出循環)並執行函數,密碼錯誤則允許嘗試3次,超過3次驗證失敗,退出驗證
            while flag:
                passwd = raw_input("密碼:")
                passwdMd5 = calc_md5(passwd)
                if passwdMd5 == userDB[name]:
                    flag = False
                    func(*args,**kwargs)
                elif counter > 2:
                    print "您已經嘗試了3次,請過會兒再試!!"
                    return
                else:
                    counter += 1
        else:
            print "用戶名不存在,請您先進行注冊!"
            register()
    return decorater

if __name__ == "__main__":
    @login
    def hello():
        print "Hello world!"
    hello()

 


免責聲明!

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



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