4

これは暗号理論の質問ですが、ハッシュアルゴリズムの結果がソースと同じ値になる可能性はありますか?たとえば、文字列があるとします。

baf34551fecb48acc3da868eb85e1b6dac9de356

SHA1ハッシュを取得すると、結果は次のようになります。

4d2f72adbafddfe49a726990a1bcb8d34d3da162

理論的には、これら2つの値が一致する場合はありますか?ここでは特にSHA1について質問していません。これは単なる例です。これを防ぐような方法でハッシュアルゴリズムが構築されているのではないかと思っています。

4

4 に答える 4

8

まあ、それはハッシュアルゴリズムに依存します-しかし、これを明示的に妨げるものがあるのを見て驚かれることでしょう。結局のところ、それは本当に問題ではないはずです。

もちろん、(暗号化ハッシュの場合)発生する可能性は非常に低いと思いますが、発生したとしても、問題は発生しないはずです。

非暗号化ハッシュ(ハッシュテーブルなどで使用される)の場合、場合によってはソース値を返すことが完全に合理的です。たとえば、JavaではInteger.hashCode()、エンベディッド値を返すだけです。

于 2009-09-04T15:21:34.130 に答える
4

確かに、整数のPythonハッシュアルゴリズムは整数の値を返します。したがって、hash(1)==1です。

于 2009-09-04T15:25:40.130 に答える
4

一見ランダムな出力を返す優れたハッシュアルゴリズムを考えると、出力としてそれ自体を与える平均1つの入力があるはずです。ハッシュがN個の可能な出力を与えることができるとしましょう。これは、これが可能なN個の可能な入力があることを意味します。これらのそれぞれについて、入力に一致する出力のオッズは1 / Nであるため、予想される固定小数点の数はN * 1 / N、つまり1です。

于 2009-09-04T15:37:28.783 に答える
2

hash(x)== xである「固定小数点」を回避するようにハッシュ関数を定義できますが、ハッシュクワインは、生のバイナリではなくハッシュの16進数で文字列表現を使用するという点で少し異なります。それを苛立たせる可能性のあるハッシュを設計することは不可能だと思います。また、0-FからASCII文字コードへの任意のマッピングに依存するため、数学的にはあまり面白くありません。

md5(x)== xであるMD5固定小数点はありますか?を参照してください。MD5の固定小数点についての議論。確率の計算は、16進ハッシュクワインおよび128ビットの出力を持つ他のハッシュ関数にも同様に当てはまります。

于 2009-09-04T15:40:50.353 に答える