Moin,
Existiert dazu ein gängiger Algorithmus?
Ja, MD5.
Key: abcdefghijklmnop (16 Byte = 128 Bit)
Mit Verlaub, was soll das? Wenn du den Benutzer ohnehin einen 16-Byte-Schlüssel eingeben lässt, ist es Jacke wie Hose ob du den erst kompliziert aussehend verwurschelst oder direkt als Schlüssel in den Algorithmus gibst. Bestenfalls gewinnst du beim verwurschteln nichts, schlimmstenfalls verlierst du Entropie. Zumal der OP explizit ein Passwort beliebiger Länge haben will.
Die übliche Vorgehensweise ist dann wirklich einen beliebigen Hash mit mindestens 128 Bit Länge zu nehmen, und dann das Nutzerpasswort (ggbf. mit Salt) da reinzustecken.
MD5 ist zwar gebrochen, aber das sollte in dieser Anwendung keinen Unterschied machen.
Wenn man will, kann man bei diesem Schritt auch gleich Wörterbuchangriffe auf das Passwort erschweren: Beim ersten Verschlüsseln einen zufälligen Saltwert erzeugen und dann das Passwort zusammen mit dem Salt ein paar (Hundert/Tausend/Millionen/whatever) mal hashen und das Ergebnis als Schlüssel benutzen (Salt und Iterationszahl müssten dann im Klartext zum verschlüsselten Text mitgegeben werden). Ein Angreifer der nicht direkt den Key (128 Bit) sondern das Passwort (gute Passwörter haben ~6 Bit pro Zeichen; die meisten Passwörter sind aber nicht gut) angreifen will müsste dann die mehrfachen Hashoperationen ebenfalls durchführen (naja, man kann auch eine Abkürzung für "n-mal Hash mit Salt x" suchen, aber das ist auch nicht wirklich einfach) was ihn hoffentlich deutlich ausbremst, während es den legitimen Benutzer nicht wirklich stört, wenn er nach Eingabe seines Passwortes 1s warten muss bis die Iterationen durch sind.
Henryk Plötz
Grüße aus Berlin
~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~