我目前正在考慮爲我的C#類的最終項目做些事情。我想到的是一個受密碼保護的數據存儲應用程序,需要密碼才能訪問存儲在二進制文件中的數據。哪種加密算法用於密碼保護數據?
問題是我不確定使用哪種加密,如果我決定做這個項目。
什麼加密最適合這種情況?哪種加密最好?
只是稍微多瞭解我的計劃。
首先,用戶必須指定用戶名/密碼信息才能保存數據。數據將被保存在二進制文件中,以後應該能夠在登錄信息正確後查看。
我目前正在考慮爲我的C#類的最終項目做些事情。我想到的是一個受密碼保護的數據存儲應用程序,需要密碼才能訪問存儲在二進制文件中的數據。哪種加密算法用於密碼保護數據?
問題是我不確定使用哪種加密,如果我決定做這個項目。
什麼加密最適合這種情況?哪種加密最好?
只是稍微多瞭解我的計劃。
首先,用戶必須指定用戶名/密碼信息才能保存數據。數據將被保存在二進制文件中,以後應該能夠在登錄信息正確後查看。
可以找到Rijndael(AES的底層密碼)的C#實現here。
加密算法可能沒有這樣的東西,但它是其他人正在使用的正確的算法。
爲了進一步澄清:
這是加密的工作原理:
Plaintext -> [encryption] -> Ciphertext -> [decryption] -> Plaintext
這是你必須使用一個密碼管理器是什麼。
這是散列如何工作的:
Message -> [hashing] -> Hash -> [???] -> Message
你可以(也應該)使用散列算法來存儲用於身份驗證數據庫(散列)密碼(例如登錄到網站)。爲此,您使用鹽或基於密鑰的消息認證代碼。
而不是「散列」存儲在數據庫中的散列,您只需散列用戶輸入並驗證它是否匹配。這是而不是適用於像密碼管理器這樣的應用程序。
使用密碼安全散列函數(如SHA-512),目前不可能「去散列」,即,即使您知道散列,也無法檢索該消息。
@丹尼斯:所以哈希在我的情況是不可能的。太棒了,因爲這給我帶來了很大的困惑。你的加密方案看起來像是我需要的。 +1。我會查找AES和CTR的主題。 – HelpNeeder
不知道這是否是對您問題的回答,但許多存儲用戶名和密碼的系統往往只是對密碼進行哈希處理,因此您絕不會實際存儲用戶密碼,而只是單向散列版本。這樣,當他們嘗試再次登錄時,您只需輸入密碼並將其與現有密碼進行比較即可。
MD5是最簡單的一種,但我相信SHA256/512是最好的選擇之一,但這是一種單向哈希算法,如果您需要永遠不會適用於您的情況可以訪問密碼的純文本版本。通常這不是一個問題,因爲您可以讓他們更改密碼,並且用戶永遠不需要以純文本形式查看密碼。
如果你不能使用單向哈希,那麼只需使用blowfish或其他一些簡單的雙向加密算法。互聯網充滿了不同的.net加密提供商。如果這是作業,我不認爲它真的很重要,只要你可以顯示你爲什麼和何時使用加密的工作知識,你應該得到標記。
我清除了所有的評論,我對兩個想法也做了很多/最/所有的答案。如果你*請閱讀問題*,那麼你會注意到他所要求的是一個類似LastPass的系統。 **關於「永遠不要做這件事,總是哈希」的所有評論和答案都是純粹的基礎**。如果LastPass突然決定我不能從他們的系統中檢索任何密碼,我會非常沮喪,因爲沒有閱讀規範的人會決定散列所有內容。 –
@ LasseV.Karlsen:如果你花時間閱讀最初的,未經編輯的問題,你會意識到爲什麼大多數答案都朝着這個方向前進。 「密碼存儲應用程序」在這個意義上是不明確的,我仍然認爲我們的答案對OP的問題作出了貢獻。雖然在您添加*您的*評論時,答案*是*「平淡無奇」,您刪除的評論允許OP達到了解她/他的問題並修改它的問題,恕我直言。但我想我們仍然可以爲更新的問題添加新的答案。 – Groo
這個問題似乎只是說他想要一個需要身份驗證的應用程序纔會顯示二進制文件的內容。所以這意味着文件應該被加密,並且一旦用戶登錄,他們可以查看內容,如果不是這種情況,應該改變問題以更接近地反映實際問題。 – Grofit