1. 程式人生 > >python之hashlib模塊

python之hashlib模塊

否則 示例 密碼加密 如果 登錄 嘗試 執行 data input

示例:大文件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()

python之hashlib模塊