2011-12-23 43 views
1

我的同事正在使用商業程序,該程序在某些數據庫上編碼和存儲登錄密碼。使用已知哈希碼確定加密算法

現在,我正在開發另一個程序來完成一些其他任務,但我希望我的同事使用相同的用戶名和密碼對此程序進行身份驗證,以避免混淆。

問題是,我沒有(也可能永遠不會)任何源代碼來確定他們使用哪種加密算法。 我跑了一些測試,並觀察到相同的密碼總是產生長度爲24個字符的相同的哈希碼。例如;

1   XeVTgalUq/gJxHtsMjMH5Q== 

123456 0Q8UhOcqClGBxpqzooeFXQ== 

有什麼方法可以確定他們使用了哪種算法? 在此先感謝,

+0

無法逆轉散列函數對不起... – andreapier 2011-12-23 18:11:39

+0

這些可能是base64編碼的16字節輸出版本。這表明MD5可能是候選人,不太可能是MD4或MD2。 – 2011-12-23 21:39:11

+0

如果這些是*同事*,你不應該問問他們*他們使用了什麼算法?或者你是否在一些內部溝通被禁止的陌生公司? – 2011-12-23 22:25:22

回答

0

沒有。這就是加密/散列的一點 - 它應該是不透明的,這樣反向工程就不容易了。你唯一能做的就是嘗試一些着名的散列算法,比如SHA-1,看看散列值是否與其他程序匹配。但是,沒有辦法知道其他程序是否添加了任何「鹽」或將多個東西散列在一起,例如用戶名+密碼或其他方案。所以你在這方面可能不太好。

你可以嘗試一下你的新程序的一個想法:如果用戶從未登錄過,允許他們第一次用任何密碼登錄。告訴用戶他們應該使用與其他程序相同的密碼。然後,當他們登錄時,捕獲該值並使用您自己的哈希方案對其進行哈希處理,然後將其存儲以供將來登錄。所以最終你會得到你想要的結果(用戶可以使用相同的密碼),而不必對其他程序的加密方案進行反向工程。

現在,顯然這種方法的缺點是它首次登錄時不安全。如果在真實用戶第一次有機會登錄(並因此鎖定他的密碼)之前以某用戶的身份登錄,則某人可能劫持另一用戶的帳戶。所以這只是一個選項,如果在新程序中沒有預先加載可能被泄露的敏感數據。此外,您還需要管理員重置用戶密碼的功能,以便在發生這種情況時,您可以在真實用戶報告無法登錄時輕鬆更正。

+0

感謝您的評論!我嘗試過使用MD5,SHA,SHA1和UTF-8-16-32模式的組合,然後空手而歸。但我必須承認,您的解決方案與密碼匹配非常出色!現在我只需確保他們在第一次嘗試時正確輸入密碼:) – JuniorDev 2011-12-23 18:31:41

+0

對於第一次登錄,編寫一個小程序將輸入的密碼複製到舊程序中,並查看它是否與此處匹配。每個用戶只需要一次(如果他們的密碼正確)。 – rossum 2011-12-24 13:11:10