我将C#与RHash结合使用,以便计算文件的btih哈希值。
目前,我正在使用3个工具来生成btih哈希值:

rhash-1.2.9-src\bindings\mono dll的

  • librhash-1.2.9-win
  • rhash-1.2.9-win32命令行工具
  • uTorrent
    问题在于,每个工具都会为同一个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/

    10-11 17:00