2016-01-07 47 views
0

是否有可能做出相反的過程呢?基於字符串的反向「公式」

string dir = textenc.Text; 
uint EDI = 0x1505; 
uint EDX = 0; 
byte ECX = 0; 

for (int i = 0; i < dir.Length; i++) 
{ 
    if (dir[ i ] != '.' && dir[ i ] != '\\') 
    { 
     EDX = EDI; 
     EDX = EDX << 5; 
     ECX = (byte)dir[ i ]; 
     EDX = EDX + EDI; 
     EDX = EDX + ECX; 
     EDI = EDX; 
    } 
}; 
return EDI; 

dir是一個字符串,例如,當dir"data\font\tahoma.ttf"該函數的輸出將是:2114405758

有沒有辦法檢索只給出輸出編號的原始字符串?

+1

看起來像一個哈希函數,所以沒有。 – 2501

+4

這是不可能的,因爲有*方式*更多的字符串比整數。函數不能是雙射,因此一般不可逆。 – 5gon12eder

+0

沒辦法扭轉這種情況? –

回答

0

簡短的回答是,這是不可能的。


長的回答是,幾乎不可能判斷生成的散列是否是給定輸入唯一的。

要知道這一點的唯一方法是爲所有可能的字符串組合生成散列,直到您點擊一個副本;或者你不打一個副本,但在後面的事情發生之前你會用完內存。還有一種情況是,您不會長時間重複複製,這也意味着哈希函數非常好,但仍然不意味着它是可逆的。

+0

通常**容易**找到兩個輸入哈希到相同的值。只有特定的**密碼**哈希是防碰撞的。對於那些,暴力是必要的。沒有必要暴力破解諸如CRC32之類的簡單哈希。 – MSalters

1

散列函數忽略字符.\。您可以根據需要添加儘可能多的數據,並且它仍會計算相同的值。

注意:正如其他人所提到的,這是一個散列函數,它會創建無數次碰撞。