Как рассчитать хеш-значение торрента с помощью Java

Как я могу вычислить значение хеша торрент-файла, используя Java? Могу ли я рассчитать его с помощью bencode?

3 ответа

Торрент-файлы хэшируются с использованием SHA-1. Ты можешь использовать MessageDigest чтобы получить экземпляр SHA-1. Вам нужно прочитать до 4:info достигается, а затем собрать байты для дайджеста до оставшейся длины минус один.

Примечание: эта реализация работает для большинства торрентов, но файл.torrent не обязательно заканчивается информационным ключом.

File file = new File("/file.torrent");
MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
InputStream input = null;

try {
    input = new FileInputStream(file);
    StringBuilder builder = new StringBuilder();
    while (!builder.toString().endsWith("4:info")) {
        builder.append((char) input.read()); // It's ASCII anyway.
    }
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    for (int data; (data = input.read()) > -1; output.write(data));
    sha1.update(output.toByteArray(), 0, output.size() - 1);
} finally {
    if (input != null) try { input.close(); } catch (IOException ignore) {}
}

byte[] hash = sha1.digest(); // Here's your hash. Do your thing with it.

Спецификация BitTorrent

Здесь должно быть все, что вам нужно, от более официального ресурса

Могу ли я рассчитать его с помощью bencode?

Нет. Это для кодирования битторрентных метаданных, а не реальных файлов.

Другие вопросы по тегам