C#rhash生成不同于rhash.exe和utorent的哈希



我使用C#和RHash来计算文件的btih哈希。目前我正在使用3个工具来生成btih哈希:

  1. 带有librhash-1.2.9-windll的rhash-1.2.9-srcbindingsmono
  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吗?

前两者的区别在于,根据RHash源代码,BTIH哈希需要正确计算额外的数据。

calc_sums.c中的init_btih_data函数记录为:

初始化BTIH哈希函数。不同于其他算法BTIH需要更多的数据来进行正确的计算。

test_hashes.c中,根据是否定义了USE_BTIH_WITH_TEST_FILENAME,实际上对BTIH示例进行了不同的处理。

init_btih_data函数(似乎只有在运行命令行应用程序时才会被调用)又根据各种参数多次调用rhash_trasmit函数。至少,它会调用两次,这可能解释了前两次之间的区别。然而,它可以称之为其他次数,我认为这解释了我们在uTorrent中看到的差异。

困难在于,虽然非托管DLL公开rhash_trasmit函数,但.NET绑定不公开,这意味着无法提供所需的额外数据。

相关内容

  • 没有找到相关文章

最新更新