2

可変長(10〜20文字)の英数字+特殊文字(ASCII)文字列を一方向にハッシュする必要があります。出力は可変長である必要がありますが、最大25文字の長さで、英数字であり、大文字と小文字は区別されません。

また、衝突を発生させたくないので、衝突を発生させるには、衝突のないもの、または少なくとも(まだ?)証明されていないものが必要です。

4

1 に答える 1

1

ここに、さまざまなハッシュ関数に関する多くの優れた点があります。私はあなたが求めていることを何もしないと思います。それらはすべて衝突します。

たぶん、いくつかの簡単な暗号化アルゴリズムをチェックする必要があります。

これがあなたが望むことをするかもしれない簡単な暗号化技術です:

char szInput = "hash me", szOutput[20], szKey = "foo";
int i, cbKey = strlen(szKey), cbInput = strlen(szInput);

for (i=0 ; i<cbInput ; ++i)
  szOutput[i] = szInput[i]^szKey[i%cbKey];  // xor with a differnt char from the key

リバーシブルなので、出力を認識できず、衝突しません。

解読が難しいもう1つの方法は、キーで現在の文字をrand()に対して行う必要のある呼び出しの数として使用することです。Xorは、rand()への最後の呼び出しの結果を使用します。rand()は、特定のシードに対して常に同じ数のストリームを生成するため、「ハッシュ」は衝突せず、復号化できます。

ハッシュを「一方向」にしたい場合は、キーを破棄してください。

于 2012-06-03T04:35:55.520 に答える