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

C#rhash生成的哈希值不同于rhash.exe和utorrent,c#,hash,utorrent,C#,Hash,Utorrent,我使用C#with来计算文件的btih散列。 目前,我正在使用3种工具来生成btih哈希: rhash-1.2.9-src\bindings\monowithlibrhash-1.2.9-windll rhash-1.2.9-win32命令行工具 自动流 问题是每个工具都会为同一个工具生成不同的btih签名(这张照片是我拍的,是皇家免费的): 对于C#hash生成,我使用Hasher.GetHashForFile(f.Name,HashType.BTIH)和rhash--bith 我做错了什么?

我使用C#with来计算文件的btih散列。 目前,我正在使用3种工具来生成btih哈希:

  • rhash-1.2.9-src\bindings\mono
    with
    librhash-1.2.9-win
    dll
  • rhash-1.2.9-win32
    命令行工具
  • 自动流
  • 问题是每个工具都会为同一个工具生成不同的btih签名(这张照片是我拍的,是皇家免费的):

    对于C#hash生成,我使用
    Hasher.GetHashForFile(f.Name,HashType.BTIH)
    rhash--bith


    我做错了什么?是否有其他方法来计算btih?

    前两种方法的区别在于,根据
    RHash
    源代码,
    btih
    哈希需要正确计算额外的数据

    calc\u sums.c
    中的
    init\u btih\u data
    函数记录如下:

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

    test\u hashes.c
    中,根据是否定义了
    USE\u BTIH\u test\u FILENAME
    ,对
    BTIH
    示例的处理实际上有所不同

    init_btih_data
    函数(似乎只有在运行命令行应用程序时才会被调用)根据各种参数依次调用
    rhash_trasmit
    函数多次。它至少会调用它两次,这可能解释了前两次之间的区别。然而,它也可以称之为许多其他时间,我认为这解释了我们看到的与uTorrent的区别


    困难在于,当非托管DLL公开
    rhash_trasmit
    函数时,.NET绑定不公开,这意味着无法提供所需的其他数据。

    您确定使用了正确的编码吗?通过读取文件并加密编码来显示代码?那些是二进制文件。。。rhash绑定使用简单的FileStream(参见sorcecode的第163行和第77行),认为您可能已经将文件读入字符串
    1:  2FF7858CC0A0B216C3676A807D619FA30101E45F
    2:  E6F07BB3C3B3B67531C84E3452980698AC1B0DAA  A:\IMG_0400.JPG
    3:  D0B96839A14A8C45BB81AD157805AE73425998E5