How URN BTIH Identifies BitTorrent v1 Info Hash

Magnet URIs rely on Uniform Resource Names (URNs) to identify files across decentralized peer-to-peer networks instead of pointing to a specific server location. In the BitTorrent ecosystem, the urn:btih namespace designates the “BitTorrent Info Hash,” which serves as the unique cryptographic fingerprint for a standard BitTorrent v1 torrent. This article explains how the urn:btih scheme operates within a magnet link, its encoding standards, and how clients interpret this identifier to locate and download content across the swarm.

A standard magnet URI contains key-value pairs separated by ampersands. The most critical parameter is the “exact topic” (xt), which defines the unique content identifier. The urn:btih namespace specifically instructs the client that the following string is a BitTorrent v1 info hash.

A standard structure appears as follows:

magnet:?xt=urn:btih:<info-hash>

When a BitTorrent client parses this URI, the urn:btih: prefix informs the engine that the payload is not a generic file hash (such as SHA-256 or MD5), but a hash derived specifically from the info dictionary of a BitTorrent metainfo file.

How the v1 Info Hash is Generated

In BitTorrent v1, the info hash is a 160-bit (20-byte) cryptographic hash generated using the SHA-1 algorithm. The input for this hash is strictly the bencoded info dictionary from the torrent’s metadata, which contains:

Because any modification to the file contents, file order, or piece size alters the info dictionary, the resulting SHA-1 hash is unique to that specific dataset.

Encoding Formats: Hexadecimal vs. Base32

The 20-byte raw SHA-1 output must be converted into text to be safely transmitted in a URI. The urn:btih namespace accepts two standard string representations:

  1. Hexadecimal (Hex): A 40-character string using characters 0–9 and a–f (case-insensitive). This represents 2 hex characters per byte (20 bytes × 2 = 40 characters).
  2. Base32: A 32-character string using the standard Base32 alphabet A–Z and 2–7 (case-insensitive). Base32 encodes 5 bits per character (160 bits / 5 = 32 characters).

BitTorrent clients detect the length of the string after urn:btih: to determine the encoding format. If the string is 40 characters long, the client parses it as hex; if it is 32 characters long, it decodes it as Base32. Both representations yield the exact same 20-byte binary hash internally.

Swarm Discovery via the Info Hash

Once the 20-byte info hash is decoded from the urn:btih parameter, the client uses it to connect to the peer-to-peer network through several mechanisms:

Because the magnet link does not initially contain the full file metadata (such as individual file names or piece definitions), the client uses the BEP 9 (Extension for Peers to Send Metadata Files) protocol to download the actual info dictionary directly from connected peers. The client verifies the downloaded metadata against the urn:btih hash to ensure the data has not been modified or corrupted before downloading the actual files.