文字列をハッシュしたいのですが、出力を整数にする必要がありますので、md5を実行することはできません。ここにいる人々は、私に啓発したいと思うかもしれない好きな数字のハッシュを持っていますか?私はPHPを使用しています。良い数値ハッシュ
ありがとうございます!
文字列をハッシュしたいのですが、出力を整数にする必要がありますので、md5を実行することはできません。ここにいる人々は、私に啓発したいと思うかもしれない好きな数字のハッシュを持っていますか?私はPHPを使用しています。良い数値ハッシュ
ありがとうございます!
たぶんこれはあなたのために十分である:
echo sprintf('%u', crc32($string));
EDIT:他の類似の代替、
echo hash('adler32', $string);
は、MD5の出力は、ちょうどほとんどありとあらゆるハッシュと同じように、数あります。これは通常、16進数で表される単なる数値です。好都合に利用できるハッシュアルゴリズムを使用し、最後から数多くのビットを切り取り、そのビットを数値として扱います。任意の良いハッシュは、最後の(または最初の、または中間の)nビットが全体の値と同じように均等に分散します。
私はそこにいくつかの良いハッシングとPHPの特定の質問が既にStackoverflowにあると思う。
ここにhashing
+php
searchをお試しください。
短いリスト、
あなたが小数とその逆に進数を変更するbase_convertを使用することができます。整数(文字列として)を16進数に変換する場合は、32ビット以下の数値に制限されます(PHP_INT_MAX)。私が持っていた利用可能ハッシュの
php -r 'foreach (hash_algos() as $hash) { echo $hash, "\n", $a = hash($hash, "test"), "\n", $b = base_convert($a, 16, 10), "\n", $c = base_convert($b, 10, 16), "\n", ($c === $a ? "yes" : "no"), "\n\n"; }' > hashes.txt
、これらは私が小数と六角の間で変換することができたものです:あなたが良いセキュリティのようにか良い鍵配布のように「良い」のハッシュを意味するか
adler32
c1015d04
3238092036
c1015d04
yes
crc32
accf8b33
2899282739
accf8b33
yes
crc32b
d87f7e0c
3632233996
d87f7e0c
yes
?最初のものは普通は2番目のものですが、比較的高いコストです。 – RBarryYoung
次のページには、効率的で最小限の衝突を示す汎用ハッシュ関数のいくつかの実装があります:http://partow.net/programming/hashfunctions/index.html –