11 Text
Um den Umgang mit Texten zu vereinfachen, sind in der Kategorie »Text« einige hilfreiche Pakete zu finden. Besonders nützlich finde ich hier die Pakete »Text_Wiki«, mit dem Sie sehr schnell ein eigenes Wiki erstellen können, und »Text_Diff«, mit dem Sie Dateien miteinander vergleichen können.
11.1 Text_Password 

Besprochene Version: 1.0 | Lizenz: PHP-Lizenz |
Klassendatei(en): Text/Password.php |
Text_Password ist ein Paket, das Ihnen die Arbeit abnimmt, selbst eine Routine zum Generieren von Passwörtern ersinnen zu müssen. Dies ist immer dann hilfreich, wenn Sie beispielsweise eine Funktionalität benötigen, um automatisch ein Passwort zu erstellen, wenn sich ein neuer User an einem System anmeldet, oder z. B. auch dann, wenn ein User sein Passwort vergessen hat und Sie ein neu generiertes Passwort an seine E-Mail-Adresse senden wollen.
Das Paket ist einfach gehalten und besteht aus vier Methoden, die alle statisch aufgerufen werden können. Im einfachsten Fall können Sie ein neues Passwort mit den folgenden Zeilen erhalten:
Rufen Sie die Methode create() ohne Parameter direkt auf, generiert sie einen String, der zehn Zeichen lang ist und vor allem ausgesprochen werden kann. Ein solches Passwort kann beispielsweise phiasiokoj lauten. Die Passwörter werden auf Basis von Zufallszahlen generiert, so dass sie mit größter Wahrscheinlichkeit einzigartig sind. Die Methode akzeptiert bis zu drei optionale Parameter, von denen der erste die Länge der zurückgegebenen Strings beeinflusst.
Vielleicht sind Sie gerade darüber gestolpert, dass das Passwort »aussprechbar« ist. Hierbei handelt es sich um ein recht wichtiges Kriterium für Passwörter. Kann ein Benutzer sein Kennwort nicht aussprechen, ist es sehr schwer für ihn zu merken, daher sind aussprechbare Varianten beliebter. Nichtsdestotrotz können Sie die Methode auch nutzen, um Passwörter zu generieren, die nicht aussprechbar sind. Dies wird über den zweiten Parameter gesteuert, den die Methode akzeptiert. Hier können Sie entweder ein 'unpronounceable' oder ein 'pronounceable' übergeben. Im ersten Fall wird dann ein Geheimwort generiert, das mit größter Wahrscheinlichkeit nicht ausgesprochen werden kann. Ein Aufruf wie Text_Password::create(8.'unpronounceable') könnte dann z. B. ein Passwort wie %T21SPNa generieren. Wie Sie schon sehen, können hier nicht nur Buchstaben und Zahlen, sondern auch Sonderzeichen enthalten sein. Die Autoren des Pakets haben auch zugelassen, dass Zeichen, die sich sehr ähnlich sind, wie das kleine L und das große i genutzt werden. Sollten diese Zeichen in der von Ihnen gewählten Schriftart also zweideutig interpretiert werden können, sollten Sie diese nachträglich ersetzen.
Mit dem dritten Parameter, den die Methode unterstützt, können Sie allerdings noch beeinflussen, welche Zeichen zum Generieren des Passworts genutzt werden dürfen. Dieser dritte Parameter wird nur dann ausgewertet, wenn Sie ein Passwort erstellen lassen, das nicht ausgesprochen werden kann. Andernfalls wird er ignoriert.
Geben Sie den String als Parameter 'alphanumeric' an, werden nur Zahlen und Buchstaben (groß und klein) genutzt, und mit 'numeric' legen Sie fest, dass nur die Ziffern von 0 bis 9 Verwendung finden. Sie können allerdings auch eine frei definierbare Menge von Zeichen angeben, bei der die einzelnen Zeichen jeweils durch ein Komma zu trennen sind. In dem Fall wird das Ergebnis nur aus diesen Zeichen generiert.
require_once "Text/Password.php"; echo Text_Password::create(15,'unpronounceable', 'a,A,b,B,c,C,x,X,0,1,2,3,@');
Die Methode create() existiert noch in einer zweiten Variante, als createMultiple(). Mit ihr können Sie mehrere Passwörter auf einmal erzeugen. Grundsätzlich unterstützt sie dieselben Parameter wie create(). Der Unterschied besteht nur darin, dass vor den schon erwähnten Parametern noch definiert werden muss, wie viele Passwörter erstellt werden sollen, die dann in einem Array zurückgeliefert werden.
require_once "Text/Password.php"; $pwds = Text_Password::createMultiple(10,8); // $pwds enthaelt 10 aussprechbare Passwoerter, ŕ 8 Zeichen
Die zweite Gruppe von Methoden, die das Paket enthält, besteht aus createFromLogin() und createMultipleFromLogin(). Diese beiden Methoden generieren ein Passwort auf Basis eines gegebenen Logins, wobei die erste ein Passwort generiert und die zweite mehrere.
createFromLogin() bekommt als ersten Parameter das Login übergeben, das als Basis dienen soll, und möchte noch mit einem zweiten Wert, einem String, die Information übergeben bekommen, wie das Passwort kodiert werden soll. createMultipleLogin() benötigt natürlich entsprechend mehrere Logins die in Form eines Arrays als Basis für die Passwörter übergeben werden. Bei einigen Verfahren wird des Weiteren ein dritter Parameter verlangt, der den Kodierungsvorgang beeinflusst.
require_once "Text/Password.php"; $login="Klaus"; echo Text_Password::createFromLogin($login,'reverse'); // gibt sualK aus
Listing 11.1 Passwort aus Login generieren
Wenn Sie wie in diesem Beispiel ein 'reverse' übergeben, wird das Login einfach umgedreht und als Passwort genutzt. Ein solches Passwort ist zwar sehr schwach und kann leicht geknackt werden, aber es hat den Vorteil, dass es leicht zu merken ist.
In Tabelle 11.1 finden Sie alle implementierten Verfahren:
[Zum jetzigen Zeitpunkt werden die XOR-Operation und die ASCCI-Rotation auf Basis des kompletten ASCII-Codes (0–255) durchgeführt. Das kann dazu führen, dass Sonderzeichen oder Whitespaces im resultierenden Passwort enthalten sind.]