仕様によると: http://wiki.theory.org/BitTorrentSpecification
info_hash: Metainfo ファイルの情報キーの値の urlencoded 20 バイト SHA1 ハッシュ。上記の情報キーの定義を考えると、値はコード化された辞書になることに注意してください。
torrentMap
は私の辞書です。info
別の辞書であるキーを取得し、ハッシュを計算してURLencode
それを計算します。
invalid info_hash
しかし、トラッカーに送信しようとすると、常にメッセージが表示されます。
これは私のコードです:
public String GetInfo_hash() {
String info_hash = "";
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = null;
try {
out = new ObjectOutputStream(bos);
out.writeObject(torrentMap.get("info"));
byte[] bytes = bos.toByteArray(); //Map => byte[]
MessageDigest md = MessageDigest.getInstance("SHA1");
info_hash = urlencode(md.digest(bytes)); //Hashing and URLEncoding
out.close();
bos.close();
} catch (Exception ex) { }
return info_hash;
}
private String urlencode(byte[] bs) {
StringBuffer sb = new StringBuffer(bs.length * 3);
for (int i = 0; i < bs.length; i++) {
int c = bs[i] & 0xFF;
sb.append('%');
if (c < 16) {
sb.append('0');
}
sb.append(Integer.toHexString(c));
}
return sb.toString();
}