![](/img/trans.png)
[英]Sending HTTP Get to Bittorent tracker - Where's info_hash and peer_id?
[英]Calculating bittorent info_hash with java
我正在嘗試計算torrent的info_hash
值。 我將整個torrent讀入StringBuffer
,然后將其剪切如下:
d8:announce...info[d6:length...e]e
我似乎無法獲得正確的哈希值。 讀取torrent到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") );
看看是否有幫助。
你可以抓住Azureus的源代碼,看看他們是如何做到的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.