Bencode - Bencode

Bencode (ausgesprochen wie Ben-Code ) ist die Codierung, die vom Peer-to-Peer- Filesharing-System BitTorrent zum Speichern und Übertragen von lose strukturierten Daten verwendet wird.

Es unterstützt vier verschiedene Arten von Werten:

Bencoding wird am häufigsten in Torrent-Dateien verwendet und ist daher Teil der BitTorrent-Spezifikation. Diese Metadatendateien sind einfach verschlüsselte Wörterbücher.

Obwohl weniger effizient als eine reine Binärcodierung, ist das Bencoding einfach und (weil Zahlen als Text in dezimaler Notation codiert werden) wird nicht von Endianness beeinflusst , was für eine plattformübergreifende Anwendung wie BitTorrent wichtig ist . Es ist auch ziemlich flexibel, solange Anwendungen unerwartete Wörterbuchschlüssel ignorieren, sodass neue hinzugefügt werden können, ohne Inkompatibilitäten zu erzeugen.

Kodierungsalgorithmus

Bencode verwendet ASCII- Zeichen als Trennzeichen und Ziffern.

  • Eine ganze Zahl wird als i <integer kodiert in Basis zehn ASCII > e kodiert . Führende Nullen sind nicht erlaubt (obwohl die Zahl Null immer noch als "0" dargestellt wird). Negative Werte werden codiert, indem der Zahl ein Bindestrich-Minus vorangestellt wird . Die Zahl 42 würde somit als i42e, 0 als i0eund -42 als codiert werden i-42e. Negative Null ist nicht zulässig.
  • Ein Byte-String (eine Folge von Bytes , nicht unbedingt Zeichen) wird als <length> : <contents> codiert . Die Länge wird wie ganze Zahlen zur Basis 10 codiert, darf jedoch nicht negativ sein (Null ist zulässig); der Inhalt sind nur die Bytes, aus denen die Zeichenfolge besteht. Die Zeichenfolge "Spam" würde als codiert werden 4:spam. Die Spezifikation befasst sich nicht mit der Codierung von Zeichen außerhalb des ASCII-Satzes; Um dies zu mildern, kommunizieren einige BitTorrent-Anwendungen die Kodierung (meist UTF-8 ) explizit auf verschiedene nicht standardmäßige Weise. Dies ist identisch mit der Funktionsweise von Netzzeichenfolgen , außer dass Netzzeichenfolgen zusätzlich ein Komma-Suffix nach der Bytefolge anhängen.
  • Eine Liste von Werten wird als l <contents> e codiert . Der Inhalt besteht aus den codierten Elementen der Liste, der Reihe nach, verkettet. Eine Liste bestehend aus der Zeichenfolge "Spam" und der Zahl 42 würde folgendermaßen codiert: l4:spami42ee. Beachten Sie das Fehlen von Trennzeichen zwischen den Elementen und das erste Zeichen ist der Buchstabe 'l', nicht die Ziffer '1'.
  • Ein Wörterbuch wird als d <Inhalt> e codiert . Die Elemente des Wörterbuchs werden mit jedem Schlüssel unmittelbar gefolgt von seinem Wert codiert. Alle Schlüssel müssen Byte-Strings sein und in lexikographischer Reihenfolge erscheinen . Ein Wörterbuch, das die Werte 42 und "spam" den Schlüsseln "foo" bzw. "bar" (mit anderen Worten {"bar": "spam", "foo": 42}) zuordnet, würde wie folgt codiert: d3:bar4:spam3:fooi42ee.

Es gibt keine Einschränkungen bezüglich der Art von Werten, die in Listen und Wörterbüchern gespeichert werden dürfen; sie können (und tun es normalerweise) andere Listen und Wörterbücher enthalten. Dadurch können beliebig komplexe Datenstrukturen kodiert werden.

Funktionen & Nachteile

Bencode ist eine sehr spezielle Art der Binärcodierung mit einigen einzigartigen Eigenschaften:

  • Für jeden möglichen (komplexen) Wert gibt es nur eine einzige gültige Bencoding; dh es gibt eine Bijektion zwischen Werten und ihren Kodierungen. Dies hat den Vorteil, dass Anwendungen bencodierte Werte vergleichen können, indem sie ihre codierten Formen vergleichen, wodurch die Notwendigkeit entfällt, die Werte zu decodieren.
  • Viele BE-Codegruppen können manuell decodiert werden. Da die codierten Werte oft binäre Daten enthalten , kann die Decodierung recht komplex werden. Bencode gilt nicht als für Menschen lesbares Codierungsformat.
  • Bencoding dient ähnlichen Zwecken wie Datensprachen wie JSON und YAML und ermöglicht die plattformunabhängige Speicherung komplexer, aber locker strukturierter Daten .

Diese Einzigartigkeit kann jedoch einige Probleme verursachen:

  • Es gibt nur sehr wenige Bencode-Editoren
  • Da bencodierte Dateien Binärdaten enthalten und aufgrund einiger Feinheiten, die mit der typischen Speicherung von Binärzeichenfolgen verbunden sind, ist es oft nicht sicher, bencode-Dateien in Texteditoren zu bearbeiten.

Siehe auch

Verweise

Externe Links