计算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());
}
}
答
我不知道在这种情况下,正确的算法,但每当你打电话,你应该总是指定字符集的String的getBytes(),代码的角度否则,使用系统默认的,往往不是你想要什么。将其替换为:
md.update(info.getBytes("UTF-8"));
并查看是否有帮助。
根据您的其他问题,你有一个答案。我想知道它是什么,因为我正在尝试做同样的事情。 – BobMcGee 2009-06-19 21:15:24