2011-05-26 23:15:58
base64 für SMTP-Auth und HTTP Basic authentication
Sowohl bei SMTP-Auth als auch bei HTTP Basic access authentication kommt base64-Kodierung zur Anwendung. Dieser Blogpost zeigt dazu Beispiele und die Verwendung von Python zur base64-Kodierung.
SMTP-Auth
Hier der Ausschnitt eines SMTP-Dialogs mit PLAIN-Authentication:
$ telnet mail.domain.de 25 Trying 128.64.32.16... Connected to mail.domain.de. Escape character is '^]'. 220 mail.domain.de ESMTP Postfix EHLO franksbox.localdomain 250-mail.domain.de 250-PIPELINING 250-SIZE 35840000 250-ETRN 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN AUTH PLAIN bWFpbDEAbWFpbDEAc2FzbHB3 235 2.0.0 Authentication successful
Nach RFC4616 besteht die Zeichenkette für den "PLAIN SASL Mechanism" aus der "authorization identity", einem NUL-Zeichen, der "authentication identity", einem weiteren NUL-Zeichen und dem Passwort. Normalerweise sind "authorization identity" und "authentication identity" gleich (die Postfachkennung). Mit Python kann man die Zeichenkette mit base64 kodieren und auch zurück dekodieren:
$ python -c "import base64;print \ > base64.encodestring('mail1\0mail1\0saslpw')" bWFpbDEAbWFpbDEAc2FzbHB3 $ python -c "import base64;print \ > base64.decodestring('bWFpbDEAbWFpbDEAc2FzbHB3')" \ > |tr \\000 / mail1/mail1/saslpw
HTTP basic access authentication
Auch hier kommt base64-Kodierung zum Einsatz. Die Zeichenkette zur Authorisierung besteht nach RFC1945 aus Name, einem Doppelpunkt und dem Passwort. Ein HTTP-Request sieht damit beispielsweise so aus:
GET /index.html HTTP/1.1 Host: www.domain.de Authorization: Basic dzE6aHRwdw==
Auch hier nutzen wir wieder Python, um manuell zu en- und dekodieren.
$ python -c \ > "import base64;print base64.encodestring('w1:htpw')" dzE6aHRwdw== $ python -c \ > "import base64;print base64.decodestring('dzE6aHRwdw==')" w1:htpw