2011-11-10 31 views
3

我一直在尋找一種在if語句中使用密碼的方法。顯然,if theRawInput == theCorrectPassword:是非常不安全的。有任何想法嗎?我已經看到這個主題的其他問題,但他們都建議base64,這也是非常不安全的(我沒有使用密碼破解我自己的編譯腳本的密碼)。Python中的真實安全

回答

6

如果攻擊者能夠訪問您的密碼數據庫,仍然隱藏密碼的唯一方法是對其進行散列處理。包括salt,以防止攻擊者依靠通用的哈希表:

import hashlib 
salt = 'uphi8eiV' 
hash = 'a7a2a98cc06f5b2935db5d2866670cc8b48116022e5bc30095b6167ddc2f3f96' 
if hashlib.md5.hexdigest(salt + rawInput).hexdigest() == hash: 
    print('Correct password') 

注意,這仍然不能抵禦選擇不當的密碼。對於這些,請確保攻擊者無法訪問密碼數據庫。如果您希望潛在的攻擊者能夠運行您的程序,但不能訪問您的程序操縱的某些數據,則必須將該數據移動到執行身份驗證的遠程安全服務器程序。

+0

好的,但有什麼辦法可以在代碼完成後隱藏代碼嗎?我已經嘗試編譯爲.pyc,但我仍然可以閱讀大部分腳本。我也嘗試過使用chmod來執行它,但執行依賴於讀取。感謝你的回答! – tkbx

+2

@ lucase.62如果攻擊者無法讀取您的代碼,則您的安全性可能不健全。你可以做的是運行一個安全的服務器,用戶可以使用它來執行他們的程序。在沒有特定配置(這是一個真正的*複雜*問題)的多用途平臺(比如Windows,GNU/Linux,Mac OS X)上,不可能提供他們無法讀取的可執行文件。 – phihag