# Einführung

# Base32

Base32 ist ein Verfahren zur Kodierung von Daten welches im RFC 4648, Abschnitt 6 spezifiziert ist. Es kodiert eine beliebig lange Folge von Bytes in einen Text der nur aus den Buchstaben A bis Z und den Ziffern 2 bis 7 besteht. Das daraus resultierende Alphabet enthält 32 verschiedene Zeichen - daher der Name. Zusätzlich wird der Text am Ende solange mit weiteren =-Zeichen ergänzt bis die Textlänge ein Vielfaches von acht ist.

Base32 ist eine gute Wahl für die verbale Übertragung von binären Daten - zum Beispiel am Telefon - weil es keine Unterscheidung zwischen Groß- und Kleinbuchstaben gibt und das Alphabet lediglich aus Großbuchstaben und Ziffern besteht, die nicht leichtfertig verwechselt werden können.

# Base32Check1

Base32Check1 ist ein maßgeschneiderter Algorithmus für eine einstellige Prüfsumme für das Base32-Alphabet, welcher ursprünglich von Thaddée Tyl entworfen wurde und in einem Blog-Posting vom 29. April 2019 beschrieben ist. Er basiert auf einem wissenschaftlichen Artikel von Yanling Chen, Markku Niemenmaa and A. J. Han Vinck der von Springer am 2. April 2015 online veröffentlich wurde. Die Implementierung basiert außerdem auf einigen speziellen Optimierungen für Binärzahlen die von John Kerl im April 2004 online veröffentlicht wurden.

Nach Angabe des Artikels by Springer erkennt der Algorithmus zuverlässig die folgenden Fehler, die zusammen über 90% der häufigsten Übertragungsfehler entsprechen, entsprechend statistischer Analysen, die unabhängig von D.F. Beckley and J. Verhoeff durchgeführt wurden:

Fehler Beispiel
Ersetzung eines einzelnen Zeichens ..A....B..
Zeichentransposition ohne dazwischenliegende Zeichen ..AB....BA..
Zeichentransposition mit einem dazwischenliegenden Zeichen ..ABC....CBA..
Identische Ersetzung von zwei identischen Zeichen ohne dazwischenliegende Zeichen ..AA....BB..
Identische Ersetzung von zwei identischen Zeichen mit einem dazwischenliegenden Zeichen ..ACA....BCB..
Details

Teil des Base32Check1-Algorithmus ist ein wählbares primitives Polynom. Wir haben uns für das Polynom 1 + x + x3 + x4 + x5 entschieden, im Unterschied zu dem von Thaddée Tyl gewählten Polynom 1 + x2 + x5. Demzufolge unterscheiden sich die Prüfsummen die von unseren Implementierungen berechnet werden von denen, die von der originalen Javascript-Implementierung berechnet werden! Als Indiz dafür daß die zugesicherten Eigenschaften des Algorithmus immer noch eingehalten werden stellen wir daher begleitend zu den Beispielimplementierungen auch Test-Code bereit.