计算bittorent info_hash用java

问题描述:

我试图计算的洪流info_hash值。我读了整个洪流进入StringBuffer,然后切它像下面这样:计算bittorent info_hash用java

d8:announce...info[d6:length...e]e 

我似乎无法得到正确的哈希值。阅读是否洪流到在最后一个StringBuffer腐败的字节串?我错过了什么吗?

public void calculateInfoHash(){ 
try{ 
    int index = rawData.indexOf("4:info") + 6; 
    int end = rawData.length() - 1; 

    String info = rawData.substring(index , end); 

    MessageDigest md = MessageDigest.getInstance("SHA"); 
    md.update(info.getBytes()); 
    byte[] digest = md.digest(); 

    for (byte b : digest) { 
    // print byte as 2 hex digits with lead 0. 
    //Separate pairs of digits with space 
    //System.out.print("%"); 
    System.out.printf("%02X", b & 0xff); 
     } 
    System.out.println(); 

}catch(Exception e) { 
    System.out.println(e.toString()); 
} 
} 
+1

根据您的其他问题,你有一个答案。我想知道它是什么,因为我正在尝试做同样的事情。 – BobMcGee 2009-06-19 21:15:24

你可以抓住Azureus的源代码,看看他们是如何做到的。

我不知道在这种情况下,正确的算法,但每当你打电话,你应该总是指定字符集的String的getBytes(),代码的角度否则,使用系统默认的,往往不是你想要什么。将其替换为:

md.update(info.getBytes("UTF-8")); 

并查看是否有帮助。