簡體   English   中英

用java計算bittorent info_hash

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM