2012-07-26 39 views
0

我試圖實現一個SHA1解碼器,但我找不到在互聯網上有用的東西。任何人都可以幫助我找到有關如何實現SHA1解密的信息。我想將加密的數據轉換爲字符串。Java使用SHA1

+1

SHA1不加密,因此沒有SHA1的解密。 – cdhowie 2012-07-26 18:50:49

+1

另一件你應該知道的事情是:散列算法對*字節數組*,而不是*字符串*進行操作。你提到的服務器端會給你一些使用特定的*字符集編碼成字節數組的字符串的散列,如果你的輸入是字符串,你必須使用相同的*字符集*對它們進行編碼。哪一個是你從哪裏接收SHA-1散列和你的代碼之間協議的一部分。 – millimoose 2012-07-26 19:28:54

回答

9

我試圖實現一個SHA1解碼器,但我找不到在互聯網上有用的東西。

SHA-1hash function。這是單向的:你散列數據,並得到一個散列。如果你散列相同的數據,你會得到散列;如果你散列不同的數據,你會「幾乎肯定」得到不同的散列。

如果你可以「解密」它,它不會做它的工作。

+0

我明白了,謝謝你的回答。 – 2012-07-26 18:53:49

1

如果你弄清楚如何破解sha1道具給你。我認爲政府可能會這樣做,但是你很難找到一個公共圖書館,它有一個聰明的算法,不需要大量的資源來破解。

they claim they can crack it and decrypt it, I doubt it works another source that claims they can decrypt it, i doubt their code is publicly available though

有你試圖解密其特定的原因,也許有你的設計或其他方式來解決你的問題的一個漏洞?

關於繼承人的sha1

+0

其實服務器端爲我提供了密碼。密碼使用SHA1算法加密。 – 2012-07-26 18:57:10

+0

所以你想解密你的密碼服務器端從用戶看它的明文版本? – 2012-07-26 18:59:03

+0

@AlexDowining如果您需要比較它們,您需要做的是「加密」您擁有的明文密碼並比較散列版本。 – millimoose 2012-07-26 19:19:25

0

進展整潔diaolog如果你需要找到一個SHA1哈希背後的密碼,把散在谷歌。 如果密碼很常見,並且哈希不是'SALTED',那麼您就有機會獲得密碼。

否則閱讀: https://en.wikipedia.org/wiki/Rainbow_table

0

Hash函數被設計爲單向的。所以你不能簡單地計算輸出的輸入。這樣做被稱爲前映像攻擊。如果消息本身不能被猜測,這樣的攻擊需要大約2^159次嘗試,這是不可行的。

反轉SHA-1的最佳方式是猜測輸入。對於典型的用戶密碼,這種攻擊經常會成功,因爲密碼不夠複雜。例如,一個典型的GPU將能夠嘗試每秒> 100mio的密碼。

這就是爲什麼我們不使用普通SHA-1進行密碼散列的原因。我們使用故意緩慢的方案,例如PBKDF2,bcrypt或scrypt,並具有足夠的工作因子。