C# rhash генерирует хеши, отличные от rhash.exe и utorrent
Я использую C# с RHash для вычисления btih хэшей файла. В настоящее время я использую 3 инструмента для генерации хеша btih:
rhash-1.2.9-src\bindings\mono
сlibrhash-1.2.9-win
дллrhash-1.2.9-win32
инструмент командной строки- Utorrent
Проблема в том, что каждый инструмент генерирует разные подписи для одного и того же файла (фотография сделана мной, она бесплатная):
1: 2FF7858CC0A0B216C3676A807D619FA30101E45F
2: E6F07BB3C3B3B67531C84E3452980698AC1B0DAA A:\IMG_0400.JPG
3: D0B96839A14A8C45BB81AD157805AE73425998E5
Для генерации хеша C# я использую Hasher.GetHashForFile(f.Name, HashType.BTIH);
а также rhash --bith
в инструменте cmd.
Что я делаю неправильно? Есть ли другой способ рассчитать BTIH?
1 ответ
Разница между первыми двумя заключается в том, что, согласно RHash
исходный код, BTIH
хэши требуют, чтобы дополнительные данные были правильно рассчитаны.
init_btih_data
функция в calc_sums.c
задокументировано с:
Инициализируйте хеш-функцию BTIH. В отличие от других алгоритмов BTIH требует больше данных для правильного вычисления.
В test_hashes.c
, BTIH
примеры на самом деле рассматриваются по-разному в зависимости от того, USE_BTIH_WITH_TEST_FILENAME
был определен.
Тот init_btih_data
функция (которая, кажется, вызывается только при запуске приложения командной строки), в свою очередь вызывает rhash_trasmit
функционировать несколько раз в зависимости от различных параметров. Как минимум, он будет вызывать его дважды, что, вероятно, объясняет разницу между первыми двумя. Однако он может называть это несколько раз, что, я думаю, объясняет разницу, которую мы видим с uTorrent.
Сложность состоит в том, что в то время как неуправляемая DLL предоставляет rhash_trasmit
функции, привязки.NET нет, что означает, что невозможно предоставить дополнительные данные, которые ожидаются.