de en

Thorsten Reimers

Richtiges Base64 Encoding für Basic Auth

29.05.2024

Um eine Benutzer-Id und ein Passwort in einen Base64 String zu wandeln, kann man das Linux-Tool base64 verwenden.

Viele Anleitungen schlagen folgendes vor

$ echo "user:password" | base64 
dXNlcjpwYXNzd29yZAo=

Aber vorsichtig, darin liegt ein Pferdefuß. Das echo Kommando ergänzt einen Zeilenumbruch, der mit in das Ergebnis kodiert wird.

Die Rückwandlung sieht trügerisch gut aus:

$ echo "dXNlcjpwYXNzd29yZAo=" | base64 -d
user:password

Aber wenn man genauer hinsieht, ist ein Umbruch zu viel:

$ echo "dXNlcjpwYXNzd29yZAo=" | base64 -d | hexdump -C
00000000  75 73 65 72 3a 70 61 73  73 77 6f 72 64 0a        |user:password.|
0000000e

So muss es korrekt gemacht werden:

$ echo -n "user:password" | base64 
dXNlcjpwYXNzd29yZA==

Wandelt man das zurück, sieht man deutlich, dass kein Zeilenbruch am Ende enthalten ist:

$ echo "dXNlcjpwYXNzd29yZA==" | base64 -d
user:password$

Der Bash Prompt muss unmittelbar hinter der Ausgabe erscheinen, nur so ist es korrekt!