Ich verwende C # mit RHash , um die bh-Hashwerte der Datei zu berechnen. Zur Zeit verwende ich 3 Tools, um den btih Hash zu generieren:
rhash-1.2.9-src\bindings\mono
mit librhash-1.2.9-win
dll rhash-1.2.9-win32
Befehlszeilentool Das Problem ist, dass jedes Werkzeug verschiedene Btih-Signaturen für dieselbe Datei erzeugt (das Foto wurde erstellt) bei mir ist es königlich frei):
%Vor% Für die C # Hash Erzeugung benutze ich Hasher.GetHashForFile(f.Name, HashType.BTIH);
und rhash --bith
im cmd Werkzeug.
Was mache ich falsch? Gibt es eine andere Möglichkeit, die btih zu berechnen?
Der Unterschied zwischen den ersten beiden ist, dass gemäß dem RHash
Quellcode BTIH
Hashes zusätzliche Daten benötigt, um korrekt berechnet zu werden.
Die Funktion init_btih_data
in calc_sums.c
ist dokumentiert mit:
Initialisiere die BTIH-Hash-Funktion. Im Gegensatz zu anderen Algorithmen BTIH benötigt mehr Daten für die korrekte Berechnung.
In test_hashes.c
werden die BTIH
-Beispiele tatsächlich unterschiedlich behandelt, abhängig davon, ob USE_BTIH_WITH_TEST_FILENAME
definiert wurde.
Diese init_btih_data
-Funktion (die scheinbar nur aufgerufen wird, wenn die Befehlszeilenanwendung ausgeführt wird) ruft wiederum die Funktion rhash_trasmit
abhängig von verschiedenen Parametern mehrmals auf. Zumindest wird es zweimal aufgerufen, was wahrscheinlich den Unterschied zwischen den ersten beiden erklärt. Es kann jedoch eine Reihe von anderen Zeiten genannt werden, die, wie ich denke, den Unterschied erklären, den wir mit uTorrent sehen.
Die Schwierigkeit besteht darin, dass, während die nicht verwaltete DLL die rhash_trasmit
-Funktion freigibt, die .NET-Bindungen dies nicht tun, was bedeutet, dass es nicht möglich ist, die zusätzlichen erwarteten Daten bereitzustellen.