2016-05-21 1 views
-2

を逆にするには、次のように機能します。今 どのように我々は.NETで<code>GetHashCode</code>を学ぶために使用さGetHashCodeメソッド

public int GetStringHashCode(string value) 
    { 
     int hash1 = (5381 << 16) + 5381; 
     int hash2 = hash1; 

     int len = value.Length; 
     int intval; 
     int c0, c1; 
     int i = 0; 
     while (len > 0) 
     { 
      c0 = (int)value[i]; 
      c1 = (int)value[i + 1]; 
      intval = c0 | (c1 << 16); 
      hash1 = ((hash1 << 5) + hash1 + (hash1 >> 27))^intval; 
      if (len <= 2) 
      { 
       break; 
      } 
      i += 2; 
      c0 = (int)value[i]; 
      c1 = len > 3 ? (int)value[i + 1] : 0; 
      intval = c0 | (c1 << 16); 
      hash2 = ((hash2 << 5) + hash2 + (hash2 >> 27))^intval; 
      len -= 4; 
      i += 2; 
     } 

     return hash1 + (hash2 * 1566083941); 
    } 

、どのように私はこの方法を逆にすることができます

? (int値を取得して文字列値(元の文字列)を返す方法)

+0

実際のintは4バイトですが、stringは任意の長さを持つことができますが、既に文字列をintから復元することはできません。 – Evk

答えて

4

実際の方法はありませんが、それを後ろ向きにしようとする可能性がありますが、あなたは元の文字列を戻すことはありません。

ハッシュ処理中に情報が失われ、その情報を結果から戻す方法がありません。

+1

私にdownvotingする前に、.NETの 'GetHashCode()'はcryptoghraphicハッシュの場合、計算を逆にすることができます。これは、簡単に逆算できないもの(例えば、素因数を見つける)に依存しないためです。紛失した情報に「推測」を加える必要がありますが、「遅い」ものはありません。 –

1

元の文字列を保存し、ハッシュに応じて速く抽出するにはRainbow tableを使用できます。

関連する問題