9
私はString.hash
を使用してハッシュコードを生成したいと思いますが、後でバージョンを1.8から1.9にアップグレードすると、生成されたハッシュコードも変更されることになります。Ruby 1.8と1.9は文字列に対して同じハッシュコードを持っていますか?
Ruby 1.8と1.9は文字列に対して同じハッシュコードを持っていますか?そうではないので
私はString.hash
を使用してハッシュコードを生成したいと思いますが、後でバージョンを1.8から1.9にアップグレードすると、生成されたハッシュコードも変更されることになります。Ruby 1.8と1.9は文字列に対して同じハッシュコードを持っていますか?
Ruby 1.8と1.9は文字列に対して同じハッシュコードを持っていますか?そうではないので
幸いにも、答えは簡単です:
~$ ruby1.8 -e 'p "hello world".hash'
444332266
~$ ruby1.9 -e 'p "hello world".hash'
-194819219
あなたは組み込みのハッシュ方式を使用している場合は、私は必要なハッシュコードを生成し、ビルドプロセスの一部としてスクリプトを持つことをお勧めします。あるマシンから次のマシンまで同じものであることは保証されていないことに注意してください。
あなたが一貫性のあるハッシュが必要な場合は、CRC32またはSHA1のようなものを使用します。
>> require 'zlib'
>> Zlib.crc32 "hello world"
=> 222957957
>> require 'digest'
>> Digest::SHA1.hexdigest "hello world"
=> "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
>> Digest::MD5.hexdigest "hello world"
=> "5eb63bbbe01eeed093cb22bb8f5acdc3"
彼らは全く異なる目的を持っていますが、SHA1がある一方、CRC32は、32ビットの数値を返すと、非常に高速であるという利点を持っています80ビットの数値ですが、より安全です。 (私はこれが暗号化目的ではないと仮定していますが、必要ならばSHA-256を調べます)
ルビーのハッシュ関数が信頼できないと判断していただきありがとうございます。私は自分自身を選択する必要がありますハッシュ関数は、ルビーのハッシュコードのようなコードを生成する。何か提案がありますか?私はもう1つの質問を追加しましたか? – ywenbo
を使用する必要がありますか? MD5 SHAなど?大いに感謝する。 – ywenbo
@ywenbo私もそれに答えました。 –