我将C#与RHash结合使用,以便计算文件的btih哈希值。
目前,我正在使用3个工具来生成btih哈希值:
带rhash-1.2.9-src\bindings\mono
dll的
librhash-1.2.9-win
rhash-1.2.9-win32
命令行工具问题在于,每个工具都会为同一个file生成不同的btih签名(照片是我拍摄的,是免费的):
1: 2FF7858CC0A0B216C3676A807D619FA30101E45F
2: E6F07BB3C3B3B67531C84E3452980698AC1B0DAA A:\IMG_0400.JPG
3: D0B96839A14A8C45BB81AD157805AE73425998E5
对于C#哈希生成,我在cmd工具中使用
Hasher.GetHashForFile(f.Name, HashType.BTIH);
和rhash --bith
。我究竟做错了什么?还有另一种计算btih的方法吗?
最佳答案
前两者的区别在于,根据RHash
源代码,BTIH
哈希值需要正确计算其他数据。init_btih_data
中的calc_sums.c
函数记录为:
实际上,在test_hashes.c
中,取决于是否已定义BTIH
,对USE_BTIH_WITH_TEST_FILENAME
示例的处理实际上是不同的。
该init_btih_data
函数(似乎仅在运行命令行应用程序时才被调用)依次根据各种参数多次调用rhash_trasmit
函数。至少它将两次调用它,这可能解释了前两者之间的区别。但是,它可以多次调用它,我认为这可以解释我们在uTorrent上看到的区别。
困难在于,尽管非托管DLL公开了rhash_trasmit
函数,但.NET绑定(bind)没有公开,这意味着无法提供期望的其他数据。
关于C#rhash生成的哈希与rhash.exe和utorrent不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13877638/