14

私の目標は、長さが大文字と小文字を区別しない 42 文字の英数字である文字列に対して、6 文字の短いハッシュ文字列 (文字 [AZ][az][0-9] を含む可能性があります) を生成することです。一意性が重要な要件です。セキュリティやパフォーマンスはそれほど重要ではありません。

この結果を与える特定のアルゴリズムはありますか、それとも MD5 ハッシュまたは SHA-1 ハッシュ (この質問のように) を切り捨てることに固執する必要がありますか? もしそうなら、衝突の確率はどのくらいですか?

4

3 に答える 3

3

最善の解決策は、ほぼ確実に SHA1 を使用し、Base62 に変換することです (ただし、フレームワークConvert.ToBase64Stringに組み込まれているため、Base64 の方がはるかに簡単です。適切な Base62 ライブラリを探す必要があります)。 6 バイトに出力します。

衝突の問題の歴史があるので、私は使用GetHashCode()しません。(私は、この特定のバグがあなたに当てはまると主張しようとしているのではなく、過去にうまく実装されていない証拠としてこれに言及しているだけです.)GetHashCode

また、カスタム ハッシュ アルゴリズムも実装しません。誤って衝突率の高いアルゴリズムを作成するのは非常に簡単です。SHA1 やその他の主要なハッシュ アルゴリズムについては、多くの調査と精査が行われており、より優れたものを思いつくのは非常に困難です。

于 2013-08-29T01:56:28.010 に答える