我在我的應用程序上有一個用戶模型,而我的密碼字段使用sha1。我想要的是,當我從數據庫中獲取sha1時,再次使它成爲一個字符串。我怎麼做?將SHA1轉換回字符串
回答
你不能 - SHA1是單向散列。給定SHA1(X)的輸出,不可能檢索X(至少,不是沒有蠻力搜索或者dictionary/rainbow table掃描)
一個非常簡單的想法就是想象我給你一個一組三位數字加起來,然後你告訴我那個數字的最後兩位數字。從這兩位數字中我無法確切得出您開始使用的數字。
又見
思想,這些其他問題也可能會啓發你:
SHA是哈希算法。您可以將用戶提供的輸入的哈希與存儲的哈希進行比較,但不能輕鬆地對該進程進行修改(從存儲的哈希中重建原始字符串)。
除非你選擇暴力或使用彩虹表(當提供足夠長的輸入時,它們都非常緩慢)。
你不能 - 這就是SHA1,MDB5等等的重點。其中大多數是單向散列安全。如果可以顛倒過來,那麼任何訪問數據庫的人都可以獲得所有的密碼。那會很糟糕。
而不是反向數據庫,而是散列密碼嘗試並將其與數據庫中的哈希值進行比較。
多數民衆贊成正是我在做什麼,我只是想檢查密碼更改,但sinsce它不可能,生病只是登錄和註銷看到,ty – onildo 2010-10-04 22:45:43
您可以通過比較哈希來檢查用戶是否更改了密碼,但在檢查密碼是否更長或如果你使用SHA1,這是不可能的。 – 2010-10-04 23:59:43
如果您從實際的角度談論這個問題,現在就放棄,並認爲它是不可能的。查找原始字符串是不可能(除非意外)。加密安全散列的大部分要點都是爲了確保找不到任何其他字符串,該字符串也會生成相同的散列。
如果您有興趣研究安全散列算法:找到a將產生給定散列的字符串稱爲「預映像」。如果您可以爲SHA-1設計(具有合理的計算複雜性),那麼您可能會在密碼分析研究人員中名聲大噪。目前已知的針對SHA-1的最佳「突破」是找到產生相同散列的兩個輸入字符串的一種方式,但是1)它在計算上相當昂貴(想想關於在幾個月找到一對這樣的對),而且不是適用於任意散列值 - 它找到匹配對(相對)很容易找到的特殊輸入字符串類之一。
你不能用SHA-1做到這一點。但是,考慮到你需要做什麼,你可以嘗試使用AES來代替。 AES允許加密和解密。
對我來說,解密該字段並不是必要的,我只是想檢查它是否正確,但我忘記了是否只是登錄,我知道密碼是否正確>。< – onildo 2010-10-09 19:43:09
- 1. 將字符串轉換爲SHA1和base64
- 2. iPhone:使用HMAC-SHA1轉換字符串
- 3. 將字符串轉換爲日期並將日期轉換回字符串
- 4. 將字符串轉換爲time_t,然後將time_t轉換回字符串
- 5. 將amqp_cstring_bytes轉換回C字符串
- 6. 將字符串轉換回列表
- 7. 將JSON字符串轉換回數組
- 8. 如何將system.drawing.color轉換回字符串?
- 9. 將argv轉換回單個字符串
- 10. 將HEX字符串轉換回AES
- 11. 將jison對象轉換回字符串
- 12. PHP:將字符串轉換回正常
- 13. 將字符串轉換回數組PHP
- 14. 將字符串值轉換回GUID值
- 15. 將pyparsing.ParseResults轉換回html字符串
- 16. 無法將字節字符串轉換回字符串
- 17. 將IP轉換爲字節/轉換回字符串
- 18. 將字符串轉換爲字符串
- 19. 將字符串轉換爲字符串
- 20. 將字符串轉換爲字符串
- 21. android將字符串轉換爲日期格式轉換回字符串
- 22. 將字符串轉換爲Double然後返回字符串
- 23. 將字符串轉換爲迴文字符串,最小插入
- 24. 將字符串轉換爲int,int轉換爲字符串
- 25. 將轉換器映射字符串轉換爲字符串
- 26. 轉換INT [] []將字符串
- 27. 將字符串轉換
- 28. 將字符串轉換
- 29. 將字符串轉換爲「_」
- 30. 將字符串轉換爲
[解碼sha1字符串到普通字符串]的可能的重複(http://stackoverflow.com/questions/3492317/decode-sha1-string-to-normal-string) – 2010-10-04 23:22:36