2012-06-11 79 views
1

我有一個大約有4,000個成員的數據庫。我需要解密所有的密碼,以便我可以使用MD5對它們進行重新加密並放入新系統。我有一個帳戶加密之前和加密後的密碼字符串,所以我想我應該能夠找出一種方法和關鍵範圍。我無法訪問原始源代碼,或者我不會在這裏。從加密前後查找加密方法和密鑰字符串

我應該提到現有的密碼差別很大。

用戶1 - qwDyP1db9iOPI

用戶2 - $ 1 $ .WXtDyLg $ yxBPAWxzd.srEWJZfqZAY/

用戶3 - do8sLMoVVqxKQ

用戶4 - TKmnAlPe

如何處理這一問題?

回答

3

通常,您不能解密密碼,因爲密碼不存儲。你所看到的是密碼的散列 - 沒有有效的方法來找到與特定散列匹配的密碼。

您可以迫使每個人都改變他們的密碼,一旦你已經配置更改爲使用MD5哈希,或者您也可以爲每一位新的臨時密碼,以獲得一次更換所有的哈希值,但隨後他們都應該再次更改無論如何。

這些看起來可能來自Linux(以$ 1 $開頭的那個已經是MD5哈希,其他的看起來像舊版的crypt() DES變體樣式)。

處理應用程序密碼時並非總是如此 - 例如,某些數據庫使用相當弱的憑證存儲 - 但Unix/Linux的口味很長時間沒有存儲實際密碼。

1

讓我們來思考。假設我可以破解我的方式到您的計算機/數據庫(不是不可能的任務)。所以我擁有你所擁有的 - 所有用戶密碼的列表,但都是加密的。但很可能我可以自己註冊到您的系統,並且我知道我自己的密碼。我可以通過我的用戶名或最新條目在數據庫中找到它的加密表單,所以現在我有了明確的加密對!如果我可以做你在問什麼,我會擁有所有的密碼和完全訪問所有帳戶。這意味着加密密碼或數據通常幾乎沒有額外的安全影響,我應該關心的是防止對數據進行未經授權的訪問。但事實並非如此,所以你不能:)

順便說一句,MD5不是加密而是散列,或者更準確地說是一個摘要。

1

貌似twalberg是正確的大部分,但我想走得更遠了一步給你一些實用的建議:

1)看http://www.openwall.com/john/(約翰開膛手),瞭解如何讓原密碼在你擁有的數據庫之外。請注意,生成的密碼可能不是原始密碼(可能,但不確定)。

一旦你使用這個工具得到了所有的密碼,想想自己:任何人都可以做到這一點。您的用戶可能會在其他地方使用這些密碼。如果有人闖入您的網站,他們可能會暴露信任您的人。如果有人使用此信息闖入其他帳戶,您的用戶可能會責怪您。對於你,明文密碼的風險是

我建議您藉此機會讓您的用戶更改他們的密碼。那些不再使用他們賬戶的人可能不得不經過一個小的驗證步驟來重新獲得訪問權限,所以你現在可以禁用他們的賬戶。

2)當您生成新的密碼數據庫時,我建議您至少使用一個安全散列(例如SHA1或SHA2)以及每個用戶salt(隨機值以生成的散列輸出作爲標準方式)幫助保護數據庫免遭意外暴露。

儘管此答案效率不高,但對於您當前的數據庫而言,如果您的實際密碼數據庫甚至大約具有您所代表的比例,則對於大多數情況下,您的當前數據庫可能很實用。

0

謝謝大家的意見。我會讓每個人都改變他們的密碼。我無意保留任何人的密碼。目標是在遷移到新系統後,所有4000個用戶不得不更改密碼,但似乎無法避免。正如davka指出的那樣,我在這個數據庫中有一個帳戶,並且知道我的密碼,並且可以看到加密版本,所以認爲足以開發一個腳本來解密並將密碼租用到新數據庫中。再次感謝。

1

如果您不想切換到當前系統,請不要切換到普通MD5 - 有「彩虹表」可以破解大量常用密碼;改爲使用鹽漬/雙重MD5或SHA