2016-03-31 52 views
1

我有一對電子郵件地址和哈希值,你能告訴我們用什麼來創建它們嗎?是否可以告訴哪個哈希算法生成這些字符串?

[email protected] 
BeRs114JrR0sBpueyEmnOWZfnLuigYTA 

[email protected] 
4KoujQHr3N2wHWBLQBy%2b26t8GgVRTqSEmKduST9BqPYV6wBZF4IfebJS%2fxYVvIvR 

[email protected] 
819kwGAcTsMw3DndEVzu%2fA%3d%3d 
+2

我投票結束這個問題作爲題外話,因爲不可能確定哪個算法產生這個輸出,因爲密文和散列輸出應該與隨機噪聲無法區分,並且有*無限*其中很多。我們不是在這裏玩[猜謎遊戲](http://blog.stackexchange.com/2012/02/lets-play-the-guessing-game/),但你可以猜測自己:[確定什麼類型的編碼/加密已被使用](http://security.stackexchange.com/q/3989/45523) –

+4

這絕對不是一個散列,因爲那麼輸出將始終具有相同的長度。 –

回答

2

首先,即使你一無所知加密顯而易見:百分號是URL encoding;解碼,給出

BeRs114JrR0sBpueyEmnOWZfnLuigYTA 
4KoujQHr3N2wHWBLQBy+26t8GgVRTqSEmKduST9BqPYV6wBZF4IfebJS/xYVvIvR 
819kwGAcTsMw3DndEVzu/A== 

而這又是base64。該編碼的長度WRT的原始字符串的長度

plaintext encoding 
17   24 
43   48 
10   16 

更多樣本將給予更多的信心,但它是相當清楚的是,編碼墊明文的8個字節的倍數。這表明block cipher(它不能是hash,因爲哈希將是固定大小)。事實上的標準塊算法是使用16字節塊的AES; 24不是16的倍數,所以這是不可能的。塊大小爲8(適合數據)的最常見塊算法是DES; 3DES或blowfish或者更稀有的東西也是一種可能性,但DES是我把錢投入的東西。

由於是密碼,所以必須有密鑰。它可能在配置文件中,或在源代碼中進行硬編碼。如果你只有二進制文件,你應該可以在調試器的幫助下找到它。使用DES,您可以通過強力找到密鑰(因爲密鑰只有56位,可以通過在Amazon上租用一些CPU時間來實現),但在程序中找到它會更容易。

如果你想重現算法,那麼你還需要弄清楚mode of operation。這裏有一個線索是,編碼永遠不會比明文長7個字節,所以沒有空間可以使用initialization vector。如果製作該軟件的開發人員做了一件糟糕的工作,他們可能會使用ECB。如果他們做了一個不太可怕的工作,他們可能會使用CBC或者(更不可能)使用其他一些常數IV的模式。如果他們再做一次稍微不太可怕的工作,那麼IV可能來自賬戶的其他特徵。您可以通過測試一些模式細化分析:

  • 如果[email protected]mple.com編碼(有兩個相同的8字節的塊開始)有兩個相同的8字節的塊開始,這是歐洲央行。
  • 如果[email protected][email protected](不同於第9個字符)的編碼具有相同的第一個塊,那麼CBC(可能)具有恆定的IV。

你需要弄清楚的另一件事是填充模式。有一個few common ones。除歐洲央行之外,要想成爲一個黑匣子有點困難。

相關問題