2017-02-25 51 views
-7

對於學校我們有一個項目分爲兩部分:一個在ASP.NET(C#)和一個在Java中。 我們有一個管理員必須能夠在Web應用程序和他的工具(Java)中登錄。在我們的項目中,ASP.NET製作數據庫非常簡單。你能解密Java中ASP.NET的哈希密碼嗎?

但是我們必須訪問管理員的密碼才能讓他登錄我們的Java應用程序。該密碼由ASP.NET散列。有誰知道如何在Java中解密它?

+2

散列是一種單向算法。你不能從哈希中獲得原始文本。 Crypting是不同的。如果你有散列,你應該散列用戶給出的密碼,並將它與你已有的散列進行比較,而不是試圖散列散列的密碼。 – BackSlash

+0

散列算法是一種單向加密。您可以加密但不解密,只能與其他字符串匹配。 – Tinwor

+0

http://stackoverflow.com/q/530426/101087 – NineBerry

回答

2

NONONONONONO - 如果可以在「解密」,「dehash」的口令,那麼你必須立即改變你的代碼是如何工作的,使其從現在開始不可能來實現這一目標。他們被散列出來是有很好的理由的。

您需要做的是創建某種邏輯來登錄某個管理員,而不使用另一個用戶的密碼 - 通過一些管理面板創建與常規登錄相同的會話/ cookie信息。唯一知道用戶密碼的人必須是用戶本人,而不是其他人。

+0

好的評論,但我不明白這是如何回答這個問題。 OP可能使用了錯誤的術語。 –

+0

@ ArtjomB。我正在考慮將它作爲評論發佈 - 但這是一個答案,因爲我告訴他正確的方法是:創建一個管理面板 - 它不回答「我如何解密...」的問題,但它廣泛地回答了潛在問題:「我如何讓管理員訪問......「 – luk2302

+0

我明白你的意思了,但是你提出的邏輯正是OP所要求的,我理解Java應用程序應該是管理面板的問題,這個問題在沒有代碼的情況下是無法解析的以瞭解我們正在討論的內容 –

0

你想要什麼並不是不可能的,但是你想要的真的很難,如果你選擇一個好的密碼,幾乎不可能從哈希中獲得密碼,而不需要計算一段時間。所有信息如長度包含單詞或密碼是小寫還是不能幫助您「反轉」散列。

爲什麼大多數人會這樣說是不可能的,因爲哈希函數被設計爲一種方式。通常用於存儲密碼,並且如果您可以將該過程簡單地顛倒過來,那麼實際上真的很糟糕,因爲您可以輕鬆地在數據庫中反轉所存儲的密碼。

首先,您可以使用彩虹表。這是存儲哈希值和有初始值的列表。 (請注意,彩虹表必須適合您的散列函數。) 如果您可以在彩虹表中找到與密碼散列匹配的散列,則可以查找初始值。但彩虹表只包含常用密碼的散列。如果你選擇一個大的和/或複雜的密碼,你需要通過所有的密碼來查看這些組合的哈希值是否與密碼的哈希值匹配,但是除非你爲像NSA這樣的機構工作,可以訪問超級計算機。