2013-05-07 101 views
1

基本上,我想有一個登錄框,以及下次登錄時記住密碼的選項。我知道那裏有加密模塊,但它們需要密碼才能在第一個地點。有沒有辦法讓用戶用來登錄到計算機的密碼,並使用它來加密我的應用程序的密碼?記住python中的密碼功能

簡而言之,我如何安全地存儲密碼供以後使用。

我使用python 3,我的程序需要跨平臺。

+0

感謝您的所有快速回復。我想我從來沒有提到它,但用戶名/密碼用於我的應用程序和它連接到的第三方網站,所以我不需要太多控制。我用鑰匙圈做出了答案,因爲它對我而言效果最好,但對於其他人來說,其他答案也會起作用。 – QxQ 2013-05-08 00:44:40

+0

[我需要在Python中安全地存儲用戶名和密碼,我的選擇是什麼?](https://stackoverflow.com/questions/7014953/i-need-to-securely-store-a-username-和密碼在Python中是什麼,我的選擇) – 2018-02-16 14:18:25

回答

2

聽起來像是你需要匙扣:https://pypi.python.org/pypi/keyring

+0

好!它在某個項目中使用嗎? – 2013-05-07 18:45:08

+0

@Stefano我不太瞭解它,只是搜索'python keychain':)。我所知道的是,OS本身就提供了一種安全存儲密碼的方式。 – ykaganovich 2013-05-07 18:49:32

+0

http://en.wikipedia.org/wiki/Keychain_(Mac_OS) – ykaganovich 2013-05-07 18:54:16

1

您無法獲取用戶用來登錄計算機的密碼。

而且,如果可以的話,你不想存儲它。

事實上,操作系統甚至沒有用戶的密碼。操作系統有散列它,當用戶登錄時,它散列用戶鍵入的內容並檢查它匹配。


另外,如果你問用戶他們的系統密碼登錄,任何精明的用戶會立即不信任你的應用程序,並拒絕使用它。讓他們創建一個密碼,然後用登錄即,而不是他們的系統密碼。不要保存密碼,保存散列,就像操作系統一樣。

如果你想驗證它們已經被OS認證......好吧,你已經知道,或者他們不能登錄到運行你的應用程序。 (如果你正在建立一個網絡服務器,允許基於本地帳戶的遠程登錄,這是一個不同的故事,但它與你的用例無關,也很複雜,所以我不會在這裏進入。)


如果您想允許某人「保持登錄狀態」,您不需要保存密碼。相反,您在登錄時創建某種難以僞造的「會話密鑰」,並將其存儲在某個地方。他們不必再次登錄,直到您銷燬會話密鑰(您在註銷時執行此操作)。


一個例外,「永不存儲密碼」是當你需要充當「代理」用戶需要密碼的一些其他應用程序。一個設計良好的應用程序將爲您提供一種正確代理登錄的方式,但許多應用程序的設計並不完善。 Web瀏覽器必須一直這樣做,這就是爲什麼大多數Web瀏覽器都有「在此站點記住我的密碼」複選框。

在這種情況下,您確實想要存儲密碼,並且代表您以您的名義(例如,使用OS X的Keychain API)對操作系統進行了理想加密,或者,如果不是,則使用由用戶「主密碼」(你不存儲)。


不幸的是,有沒有真正的捷徑學習如何設計安全或者更確切地說,有各種快捷方式,並考慮他們中的任何一個意味着你的整個系統結束不安全和所有的工作你試圖保護它最終沒用。

簡單的解決方案是使用完整的現成解決方案。

如果你想自己設計事物,至少需要所有問題的基礎。從布魯斯·舍內爾的「流行」書籍之一開始,祕密和謊言超越恐懼。然後在設計密碼系統時閱讀他的實用密碼學,以及關於評估密碼算法的應用密碼學。然後,一旦你意識到自己有多少不知道以及它有多重要,那麼就可以瞭解你的問題所需的一切,然後就可以考慮解決問題。

1

沒有出路。如果應用程序不要求用戶輸入密碼,那麼它並不安全地存儲密碼,它只是在做......「事情」。在這種情況下,不要給用戶錯誤的安全感,使用明文。

一個值得注意的例外是GNOME登錄密匙環(和其他平臺上的等價物)不要求輸入密碼,但它使用了一個技巧:它使用登錄密碼加密數據,並在啓動時輸入密碼。

如果您正在開發帶有本地客戶端的Web應用程序,請考慮使用OAuth而不是密碼。