9

ファイルのbtihハッシュを計算するために、 RHashでC#を使用しています。現在、btih ハッシュを生成するために 3 つのツールを使用しています。

  1. rhash-1.2.9-src\bindings\monolibrhash-1.2.9-windllで
  2. rhash-1.2.9-win32コマンドラインツール
  3. uTorrent

問題は、すべてのツールが同じファイルに対して異なる btih 署名を生成することです(写真は私が撮影したもので、ロイヤル フリーです)。

1:  2FF7858CC0A0B216C3676A807D619FA30101E45F
2:  E6F07BB3C3B3B67531C84E3452980698AC1B0DAA  A:\IMG_0400.JPG
3:  D0B96839A14A8C45BB81AD157805AE73425998E5

私が使用する C# ハッシュ生成に は、cmd ツールを使用Hasher.GetHashForFile(f.Name, HashType.BTIH);します。rhash --bith

私は何を間違っていますか?btih を計算する別の方法はありますか?

4

1 に答える 1

3

最初の2つの違いは、RHashソースコードによると、BTIHハッシュを正しく計算するには追加のデータが必要になることです。

init_btih_data関数calc_sums.cは次のように文書化されています。

BTIHハッシュ関数を初期化します。他のアルゴリズムとは異なり、BTIHは正しい計算のためにより多くのデータを必要とします。

ではtest_hashes.c、例は実際には定義されているBTIHかどうかによって異なる方法で処理されます。USE_BTIH_WITH_TEST_FILENAME

そのinit_btih_data関数(コマンドラインアプリケーションを実行しているときにのみ呼び出されるようです)は、rhash_trasmitさまざまなパラメーターに応じて、関数を何度も呼び出します。少なくとも、2回呼び出されます。これは、おそらく最初の2つの違いを説明しています。しかし、それは他の多くの場合と呼ぶことができます。これは、uTorrentで見られる違いを説明していると思います。

難しいのは、アンマネージDLLがrhash_trasmit関数を公開しているのに、.NETバインディングが公開していないことです。つまり、期待される追加データを提供することはできません。

于 2012-12-17T21:39:15.090 に答える