C#rhash生成的哈希值与rhash.exe和utorrent不同

Sim*_*imY 9 c# hash utorrent

我正在使用带有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
Run Code Online (Sandbox Code Playgroud)

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

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

nic*_*k_w 3

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

init_btih_data中的函数记录calc_sums.c如下:

初始化BTIH哈希函数。与其他算法不同,BTIH 需要更多数据才能正确计算。

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

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

困难在于,虽然非托管 DLL 公开了该rhash_trasmit函数,但 .NET 绑定却没有,这意味着无法提供预期的附加数据。