如何使用 Java 计算 torrent 的哈希值

发布于 2024-09-13 19:28:11 字数 131 浏览 9 评论 0原文

如何使用 Java 计算 torrent 文件的哈希值?我可以使用 bencode 计算它吗?

How can I calculate the hash value of a torrent file using Java? Can I calculate it using bencode?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

玩物 2024-09-20 19:28:11

Torrent 文件使用 SHA-1 进行哈希处理。您可以使用 MessageDigest< /a> 获取 SHA-1 实例。您需要读取直到达到 4:info,然后收集摘要的字节,直到剩余长度减一。

注意:此实现适用于大多数 torrent,但 .torrent 文件不保证以 info key 结尾。

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.

Torrent files are hashed using SHA-1. You can use MessageDigest to get a SHA-1 instance. You need to read until 4:info is reached and then gather the bytes for the digest until remaining length minus one.

Note: This implementation works for most torrents, but the .torrent file is not guaranteed to end with the info key.

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.
雄赳赳气昂昂 2024-09-20 19:28:11

BitTorrent 规范

这应该包含您需要的一切,来自更官方的资源

BitTorrent Specification

This should have everything you need, from a more official resource

夏有森光若流苏 2024-09-20 19:28:11

我可以使用bencode计算它吗?

不。那是为了编码 BitTorrent 元数据,而不是实际文件。

Can I calculate it using bencode?

No. That is for encoding bittorrent metadata, not actual files.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文