9

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

  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

对于我 在 cmd 工具中使用Hasher.GetHashForFile(f.Name, HashType.BTIH);的C# 哈希生成。rhash --bith

我究竟做错了什么?还有另一种计算btih的方法吗?

4

1 回答 1

3

前两者的区别在于,根据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 绑定却没有,这意味着无法提供预期的附加数据。

于 2012-12-17T21:39:15.090 回答