java - 为 torrent 计算的 info_hash 不正确

标签 java urlencode bittorrent sha

好吧,我已经搜索了所有相关问题和可用的源代码,只是卡住了。 我正在使用相关问题中的代码: How to calculate the hash value of a torrent using Java

构建 SHA-1 哈希。

然后我这样做是为了对其进行编码,以包含在跟踪器请求中:

URLCodec c = new org.apache.commons.codec.net.URLCodec(); return new String(c.encode(info_hash));

但是跟踪器没有回复任何对等点。通过跟踪 uTorrent,我可以看到我的 torrent 文件的正确哈希值是: T%7f%bc%a6%92%bb%8a%8b%2aL%b9%a3%0f%a59%f3%98%e6%0c%eb

但是我的代码输出: %E4%AF%3C%96%9E%D2%BAJt%C0%C3%B4%12%93%D4h%3B%9A%2CF

有什么想法为什么这行不通吗?

最佳答案

private string encodeInfoHash(string code) 
{
      //string code = "78820B24672757A60BEF15252E93F3D0C4DEB5C3";
      byte[] codeB = Encoding.Default.GetBytes(code);
      string info_hash_encoded = null;
      for (int i = 0; i < code.Length; i += 2)
      {
            string tmpCode = code[i].ToString() + code[i + 1].ToString();
            int j = Convert.ToInt32(tmpCode, 16);
            char s1 = (char)j;
            bool isSpecChar = false;
            if (s1.ToString() == "." || s1.ToString() == "-" || s1.ToString() == "~")
                  isSpecChar = true;
            if ((Char.IsLetter(s1) || Char.IsNumber(s1) || isSpecChar) && !Char.IsControl(s1) && j <= 127)
            {
                  info_hash_encoded += s1.ToString();
            }
            else
            {
                  info_hash_encoded += "%" + tmpCode.ToLower();
            }
      }
      return info_hash_encoded;
}

我使用C#,您可以阅读我的博客了解更多详细信息 http://hello.xiaoyezi.xyz/urlencode-the-info_hash.html

关于java - 为 torrent 计算的 info_hash 不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20569905/

相关文章:

p2p - 如果防火墙默认不接受传入连接,那么 p2p 网络如何工作?

java - 将一个值放入 Java 中的映射中*而不*更新现有值(如果存在)

java - 如何使用 netbeans 自动移动 Jlabel 中的下一个字符

java - 避免在 Java 中未经检查的嵌套映射转换

php - 如何在 JavaScript 和 PHP 中对 URL 进行编码?

rsync - 种子(和单个文件)是否有可证明的最佳 block ( block )大小?

java - JSP:一些表单字段是稳定的,而另一些则不稳定!

c# - 实际有效的 Url 路径编码?

c# - 为什么这两个字符 £ 和 ¬ 没有被正确解码

c - Epoll vs Libevent for Bittorrent like application