1

同じハッシュを持つ 2 つの文字列 (またはバイト配列) A と B があるとします (ハッシュとは、MD5 や SHA1 などを意味します)。その後ろに別の文字列を連結すると、A+C と B+C も同じハッシュ H' になりますか? C+A と C+B はどうなりますか?

MD5でテストしたところ、すべてのテストで、最後に何かを追加するとハッシュが同じになりましたが、先頭に追加してもそうではありませんでした。

これは常に真ですか (すべての入力に対して)?

これはすべての (よく知られている) ハッシュ関数に当てはまりますか? いいえの場合、A + CとB + Cが衝突しない(そしてC + AとC + Bも衝突しない)(よく知られている)ハッシュ関数はありますか?

MD5(x + reverse(x))およびその他の構築されたもの以外に)

4

3 に答える 3

2

詳細はハッシュ関数 H に依存しますが、一般的には次のように機能します。

  1. 入力 X のブロックを消費します (たとえば、512 ビット)
  2. 入力を小さな断片 (たとえば 32 ビット) に分割し、入力に基づいてハッシュの内部状態を更新します。
  3. さらに入力がある場合は、手順 1 に進みます
  4. 最後に内部状態をハッシュ値 H(X) として吐き出す

したがって、A と B が衝突した場合、つまり H(A) = H(B) の場合、ハッシュはそれらを消費した後に同じ状態になります。同じ入力 C で状態をさらに更新すると、結果のハッシュ値が同一になる可能性があります。これは、H(A+C) が H(B+C) である理由を説明しています。ただし、A と B のサイズが入力ブロックのサイズにどのように調整されるか、およびハッシュが入力ブロックを内部でどのように分割するかによって異なります。

C がハッシュ ブロック サイズの倍数である場合、C+A と C+B は同一である可能性がありますが、そうでない場合はおそらく同一ではありません。

于 2009-06-15T14:57:25.320 に答える
0

ここで説明するハッシュ関数は通常、暗号化(SHA1、MD5)です。これらのハッシュ関数にはアバランシェ効果があります。入力がわずかに変化すると、出力が大幅に変化します。

の接頭辞と接尾辞の拡張子は、C効果的に長い入力を行います。したがって、入力の前または後ろに何かを追加すると、有効なハッシュ出力が大幅に変わるはずです。

MD5チェックをどのように行ったかわかりません。これが私のテストです。

echo "abcd" | md5sum
70fbc1fdada604e61e8d72205089b5eb

echo "0abcd" | md5sum
f5ac8127b3b6b85cdc13f237c6005d80

echo "abcd0" | md5sum
4c8a24d096de5d26c77677860a3c50e3

同じMD5ハッシュを持つ2つの入力を見つけて、入力の最後または最初に何かを追加し、最後に追加すると元の入力と同じMD5になることがわかったということですか?

テスト結果とともにサンプルを提供してください。

于 2009-06-15T16:40:37.647 に答える
0

これは完全にハッシュ関数に依存します。また、これらの衝突が発生する可能性は非常に小さいです。

于 2009-06-15T14:43:12.950 に答える