我正在使用带有RHash的 C#来计算文件的btih哈希值.目前我正在使用3个工具来生成btih哈希:
rhash-1.2.9-src\bindings\mono
用librhash-1.2.9-win
dllrhash-1.2.9-win32
命令行工具 问题是每个工具都为同一个文件生成不同的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工具.
我究竟做错了什么?还有另一种计算方法吗?
前两者的区别在于,根据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 绑定却没有,这意味着无法提供预期的附加数据。