簡體   English   中英

從哈希字符串中獲取原始密碼

[英]Get original password from a hash string

在 C# 代碼中,我有一個使用 WinSCP API 的應用程序。 (是否是 WinSCP 或其他什么並不重要)。

要打開一個會話,我需要一個用戶和一個密碼; 由於該用戶/密碼不是由任何外部用戶引入的,它是直接從 app.config 之類的配置文件中獲取並由代碼直接插入的,因此我需要一種將其安全地存儲在配置文件中的方法。

我使用了這個哈希生成器: http ://www.danstools.com/md5-hash-generator/ 從我的密碼字符串生成一個 MD5 哈希字符串,它存儲在 app.config 文件中。

所以我的問題是:如何從“哈希”字符串中獲取原始密碼?

以防萬一:

如果這不是實現我需要的正確方法,請告訴我安全存儲密碼的好方法,並在需要時取回原始密碼以在代碼中使用它。

謝謝你。

好吧,坦率地說,你的方案被破壞了,你完全誤解了哈希函數。

哈希函數是一種方式。 您不應該能夠反轉它們 - 事實上,有時兩個不同的字符串將具有相同的哈希值。 例如,

4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2
4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2

008ee33a9d58b51cfeb425b0959121c9 () 到: 008ee33a9d58b51cfeb425b0959121c9來源

沒有辦法“反轉”它們,因為這是“消息摘要”的重點。

不要使用某些網站來生成密碼的哈希值,這只是有風險的。 您在未加密的連接 (http) 上輸入了您的超級安全密碼,並將其提供給第三方站點,該站點可能會或可能不會存儲它(以及您的 IP)。 這聽起來很偏執,但如果您試圖保護此密碼,那么您將在此過程中犯很多錯誤。 在我看來,該密碼不能再使用了。

MD5 不是可接受的密碼散列算法。 它太快了,如果我得到你密碼的哈希值,我可能會在不到一天的時間內破解它,甚至可能更快。 如果您使用的是鹽,那將是這樣,您可能沒有使用鹽。 在這種情況下,您的密碼將在幾秒鍾內用彩虹表破解。 你想要像 bcrypt/scrypt/pbkdf2 這樣的東西,因為它們有一個可配置的工作因素,使它們變慢。

您的 app.config 應該是一個相當安全的文件,有些人會很樂意在此處以明文形式存儲密碼/連接字符串。 您想保護它是件好事,但正確的方法是加密配置文件(或僅加密特定字段)。 加密 => 可逆:散列 => 不可逆。

關於如何加密配置文件已經有很多問題,描述如何加密超出了問題的范圍。

在此處檢查(以及鏈接的重復項): 加密 Web.Config

使用哈希存儲密碼的原因是無法檢索原始密碼。 這樣密碼就被安全地存儲了。 進行身份驗證的方法是對密碼使用相同的哈希函數(在您的情況下為 MD5),並比較兩個哈希值是否相等,而不是密碼本身。 哈希函數只在一個方向上起作用,但它會為相同的輸入重現相同的結果。

我希望這有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM