2010-10-04 81 views
3

我在我的應用程序上有一個用戶模型,而我的密碼字段使用sha1。我想要的是,當我從數據庫中獲取sha1時,再次使它成爲一個字符串。我怎麼做?將SHA1轉換回字符串

+0

[解碼sha1字符串到普通字符串]的可能的重複(http://stackoverflow.com/questions/3492317/decode-sha1-string-to-normal-string) – 2010-10-04 23:22:36

回答

10

你不能 - SHA1是單向散列。給定SHA1(X)的輸出,不可能檢索X(至少,不是沒有蠻力搜索或者dictionary/rainbow table掃描)

一個非常簡單的想法就是想象我給你一個一組三位數字加起來,然後你告訴我那個數字的最後兩位數字。從這兩位數字中我無法確切得出您開始使用的數字。

又見

思想,這些其他問題也可能會啓發你:

0

SHA是哈希算法。您可以將用戶提供的輸入的哈希與存儲的哈希進行比較,但不能輕鬆地對該進程進行修改(從存儲的哈希中重建原始字符串)。

除非你選擇暴力或使用彩虹表(當提供足夠長的輸入時,它們都非常緩慢)。

1

你不能 - 這就是SHA1,MDB5等等的重點。其中大多數是單向散列安全。如果可以顛倒過來,那麼任何訪問數據庫的人都可以獲得所有的密碼。那會很糟糕。

而不是反向數據庫,而是散列密碼嘗試並將其與數據庫中的哈希值進行比較。

+0

多數民衆贊成正是我在做什麼,我只是想檢查密碼更改,但sinsce它不可能,生病只是登錄和註銷看到,ty – onildo 2010-10-04 22:45:43

+0

您可以通過比較哈希來檢查用戶是否更改了密碼,但在檢查密碼是否更長或如果你使用SHA1,這是不可能的。 – 2010-10-04 23:59:43

0

如果您從實際的角度談論這個問題,現在就放棄,並認爲它是不可能的。查找原始字符串不可能(除非意外)。加密安全散列的大部分要點都是爲了確保找不到任何其他字符串,該字符串也會生成相同的散列。

如果您有興趣研究安全散列算法:找到a將產生給定散列的字符串稱爲「預映像」。如果您可以爲SHA-1設計(具有合理的計算複雜性),那麼您可能會在密碼分析研究人員中名聲大噪。目前已知的針對SHA-1的最佳「突破」是找到產生相同散列的兩個輸入字符串的一種方式,但是1)它在計算上相當昂貴(想想關於在幾個月找到一對這樣的對),而且不是適用於任意散列值 - 它找到匹配對(相對)很容易找到的特殊輸入字符串類之一。

0

你不能用SHA-1做到這一點。但是,考慮到你需要做什麼,你可以嘗試使用AES來代替。 AES允許加密和解密。

+0

對我來說,解密該字段並不是必要的,我只是想檢查它是否正確,但我忘記了是否只是登錄,我知道密碼是否正確>。< – onildo 2010-10-09 19:43:09