2017-02-27 173 views

回答

2

sha-256值只是一個256位(32字節)值,通常在Java中表示爲Stringbyte[]

作爲一個價值本身是毫無意義的,如果你想知道一個具體的String是否是一個散列,那麼任何32字節的數字都是一個無限的未知純文本的散列。但這就像問「我怎麼知道一個32字節的數字是一個數字?」,你會發現你無處可去。

僅當它與純文本配對時纔有用,以便您可以將它與從純文本計算的散列進行比較以驗證它們是否匹配。

+0

「*任何32字節的數字都是無限未知純文本的散列*」=>真的有2^32個可能的SHA256值嗎? – assylias

+0

http://crypto.stackexchange.com/questions/2670/is-every-output-of-a-hash-function-possible – assylias

+0

@assylias:可能你的意思是'2 ^(32 * 8)'可能的SHA256值,但是一般來說,你的問題沒有答案,因爲它涉及的散列函數是特定的。假設任何可能長度的可能數量的純文本,那麼如果函數本身非常適合,散列函數的共域可以是完整的。證明這是一個不同的故事。 – Jack

1

我認爲你可以做的是散列其他字符串,然後將這兩個字符串相互比較。
不知道這是否會幫助你,但我讀到它是創建彩虹表破解密碼嘗試時常用的實踐。
編輯:哦,忘記了這也是比較密碼在PHP登錄到網頁iirc時的方式。
至少我不得不這樣做大學。

+1

這是行不通的,因爲你不知道這兩個值所使用的散列是相同的。 – CLR45

+1

糾正我,如果我錯了,但由於OP說這是一個SHA2哈希,應該有一個哈希它的標準函數,如在PHP中的MD5功能。 – clockw0rk

3

是和否。

你可以很容易地測試一個字符串是十六進制的。然後您可以測試它是否包含統計上合理的數字和字母。這將排除一些常見的非sha256字符串。

但是,如果有人創建了一個隨機字符串設計看起來像一個sha256,我不認爲有可能通過任何數學測試區分它與真實的東西。該算法被設計爲對此有效。

相關問題