4

私はファイルを検索するためのPythonプログラムを書いています。このファイルは、ファイル名(std::hash<std::string> hash_fn)としてハッシュを使用してC++プログラムによって作成されました。ハッシュが作成された文字列は知っていますが、同じハッシュを生成するPythonハッシュ関数が見つかりません(私はhash()すべてを試しましたhashlib)。例として、文字列

file:///home/ubuntu/Untitled.skp

ハッシュを与える必要があります:

3133433022

残念ながら、私はC ++プログラムを制御できず、Pythonスクリプト(または最終的なPython拡張機能)についてのみ制御できます。C ++が使用するのと同じハッシュ関数を見つけたり実装したりすることは可能ですか?または、別のアプローチを試す必要がありますか?

4

3 に答える 3

3

ほとんどの場合std::hash、C ++やPythonハッシュ関数のような内部ハッシュ関数は、外部で使用するようには設計されていません。このようなシステムを設計するときは、使用するハッシュ関数を厳密に指定し、両方のシステムに実装してください。

これには遅すぎて、すでに使用std::hashしている場合は、ソースを見つけるだけで(コンパイラによっては利用できない場合があります)、使用するハッシュアルゴリズムを見つけるためにそれらをリバースエンジニアリングし、指定しますハッシュとして使用し、必要な言語で再実装します。(コンパイラの次のリリースで変更される可能性があるため、独自のコードで実装する必要があります。)

于 2012-09-27T14:14:18.193 に答える
2

互換性を持たせるには、SHA-1のように、両側で既知のハッシュを使用します。Pythonには組み込みがあり、c ++に組み込まれていない場合は、組み込みのライブラリが多数あります。

于 2012-09-27T14:11:06.433 に答える
1

C ++部分を制御できる場合は、両側で同じハッシュアルゴリズムを使用していることを確認できます。hash_fnまたは、の実装をいつでも確認して、Pythonで同じ機能を再実装してみることができます。

そうしないと、ハッシュ関数を一致させるのが非常に難しい場合があります。

于 2012-09-27T14:04:40.440 に答える