2012-03-24 44 views
2

我正在創建一個簡單的日記應用程序。 我希望用戶能夠設置自定義啓動密碼。保護帶有密碼保護的密碼/日記應用程序的窗體的最佳實踐)?

但是最佳實踐是什麼?我在哪裏安全地存儲密碼?我想最好是存儲密碼的散列 - 如何做到這一點?

將密碼(或散列)存儲在易讀的XML文件中不是最好的選擇嗎?然後可以打開XML文件並刪除哈希字符串,然後在應用程序加載時將不會有密碼,對吧?

致以問候

+0

爲什麼你想要一個啓動密碼?保護日誌文件的密碼聽起來像是一個更好的主意。通過密碼保護日誌文件,我的意思是使用PBKDF2從密碼派生的密鑰對其進行加密。 – CodesInChaos 2012-03-24 10:47:51

回答

0

是的,哈希密碼是最好的選擇。只要您向用戶提供某種方式來檢索密碼,那麼存儲密碼的位置並不重要(在大多數情況下)。例如,在啓動時,用戶創建他們的日誌,因此他們輸入的用戶的密碼被創建/散列。您還需要詢問其他信息以及此類母親的姓氏,第一隻寵物等(用戶知道的東西)。

即使有人刪除散列,日誌也會被鎖定,您不應該簡單地要求用戶輸入新日誌。除非他們驗證其他信息,否則用戶不能進入。

您也可以使用用戶可以在其他地方安全地存儲的密鑰(如USB驅動器上的文件)。你甚至可以進一步加密數據庫本身。

很多方法可以做到這一點,但沒有充分證明。

2

讓我們來解決這個問題,希望閱讀您的日記。你關於哈希的ansatz並不錯,但是假設你定義了一個啓動密碼,並且我們將哈希存儲到某個XML文件的密碼中。什麼阻止了我拆卸你的應用程序(如果我們正在考慮C#或任何JIT語言,這很容易實現),只需更改密碼驗證子例程以始終返回true

你需要的是實際期刊/頁面的加密。請參閱answer to this SO question以獲得完整的日誌,這會損壞日記頁面,以便以明文保存,而且在沒有密碼的情況下很難取回。

您現在也可以選擇存儲散列,並驗證其對用戶的有效性;因爲打開每個日記頁面仍然需要實際的密碼。

編輯

SO answer甚至更​​好。兩個版本都使用.NET框架的一部分RijndaelManaged class進行加密和解密。