さまざまなデータ(URL、キーワードなど)のハッシュを生成するための要件の一部として、PHPベースのプロジェクトにFNVハッシュアルゴリズムを統合しようとしています。
NevenBoyanovによるこの実装を見ました。彼は、PHPの算術制限のために、乗算の代わりにビット単位のシフトと加算を使用することを余儀なくされたと述べました。彼の実装は正しいですか?私の知識はコンピュータサイエンスのこの分野ではどういうわけか限られているので、自分でそれを確認することはできません。
私が持っているもう一つの質問は、FNVのさまざまな「フレーバー」についてです。32ビット、64ビット、および128ビットのバリアントを提供することを確認しましたが、上記の実装を使用すると、常に8文字の16進ハッシュが得られます(dechex()を使用して整数の結果を16進に変換します)。
「Loremipsumdolorsit amet、consecteturadipiscingelit。Proinatlibero mi、quis luctus massa。」という入力が与えられると、次の16進数の結果が得られます。
- (32ビットオフセット)5b15c0f2
- (64ビットオフセット)6ea33cb5
なんでそうなの?64ビットFNVからの16文字の16進結果を期待しています。「フレーバー」は、使用される算術演算とシードの種類のみを指し、結果の長さは指しませんか?(つまり、64ビットFNVと言うと、ハッシュ関数は64ビット操作とシードを使用しますが、結果は32ビットのままです)
少しの啓蒙をいただければ幸いです:)