2012-12-14 28 views
9

我正在使用C#與RHash以計算文件的哈希散列。C#rhash生成與rhash.exe和utorrent不同的哈希

  1. rhash-1.2.9-src\bindings\monolibrhash-1.2.9-win DLL
  2. rhash-1.2.9-win32命令行工具
  3. uTorrent的

的問題是,每一個工具生成: 目前我爲了產生btih散列正在使用3個刀具同一個file(這張照片是由我拍攝的,它是免費的)的不同的簽名:

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

對於C#散列生​​成,我在cmd工具中使用Hasher.GetHashForFile(f.Name, HashType.BTIH);rhash --bith

我在做什麼錯?有沒有另一種方法來計算btih?

+0

你確定你使用正確的編碼嗎?通過閱讀文件並加密它來顯示代碼 – thumbmunkeys

+0

編碼?那些是二進制文件... rhash綁定使用簡單的FileStream(請參閱sorcecode的第163和77行https://github.com/rhash/RHash/blob/master/bindings/mono/Hasher.cs) – SimSimY

+0

以爲你可能會已經將它讀入一個字符串中 – thumbmunkeys

回答

3

前兩者之間的區別在於,根據RHash源代碼,BTIH散列需要額外的數據才能正確計算。

calc_sums.cinit_btih_data功能是記錄有:

初始化BTIH散列函數。與其他算法不同,BTIH 需要更多數據才能正確計算。

test_hashes.c中,BTIH實例取決於USE_BTIH_WITH_TEST_FILENAME是否已被定義實際區別對待。

init_btih_data函數(它似乎只在運行命令行應用程序時才被調用)依次調用rhash_trasmit函數多次,具體取決於各種參數。至少,它會調用它兩次,這可能解釋了前兩者之間的差異。但是,它可以稱之爲其他幾次,我認爲這解釋了我們與uTorrent看到的差異。

難度在於,雖然非託管DLL公開rhash_trasmit函數,但.NET綁定卻沒有,這意味着它不可能提供預期的附加數據。