Oh je, hier werden einige Dinge verwechselt. AES ist ein Verschlüsselungsverfahren, MD5 und Co sind Hashverfahren. Mag zwar ähnlich aussehen, sind aber zwei verschiedene Dinge.
Bei Verschlüsselungsverfahren unterscheidet man zwischen asymmetrischen und symmetrischen Kryptosystemen. AES wäre der erste Fall, sprich man hat einen Schlüssel mit dem man ver- und entschlüsseln kann. Kannste mit deiner Haustür vergleichen. Der zweite Fall ist zum Beispiel RSA. Dort hat man einen private und einen public key. Mit deinem public key kann jeder Nachrichten verschlüsseln, die an dich sind. Und nur du kannst sie mit deinem private key wieder entschlüsseln.
So, aber nun muss beachtet werden, dass ein Verschlüsselungsverfahren Nachrichten (einfach betrachtet) nur umwandelt und man dort die Nachricht auch wieder (mit passendem Schlüssel) zurückwandeln kann. Bei einem Hashverfahren ist dies nicht so (auch wenn man durchaus wieder den Klartext erhalten kann, dazu gleich mehr).
Ein Hashverfahren nimmt also eine Nachricht und wandelt diese immer nach dem selben Schema auf einen gleichlangen Hashwert ab. Dadurch kommt es irgendwann auch zu Kollisionen und es kann passieren, dass Nachricht A den selben Hash wie Nachricht B bekommt (du hast schließlich unendlich viele Nachrichten, aber nur einen begrenzten Hashwertraum). Würdest du also einen Hashwert knacken, bekommste irgendwann ne Nachricht raus, von der du aber nicht ausgehen kannst, dass es auch die gewünschte Nachricht war. Es könnte ja auch Nachricht C entstehen, die zwar den gleichen Hashwert hat, aber nicht die ursprüngliche Nachricht war.
So und zur Sicherheit von Hashwerten. md5 und sha1 sind unsicher. Wird dir jeder, der etwas Ahnung davon hat, bestätigen. Dies liegt einmal daran, dass es bereits riesige md5 und sha1 Datenbanken gibt - sowie extrem große Rainbowtables, und Forscher ziemlich effiziente Verfahren gefunden haben um eine Kollision zu ermitteln, was bei moderneren Hashverfahren nicht der Fall ist (wie schon erwähnt sind die neuere Sha's noch geeignet, ich nutze ganz gern auch mal Whirlpool). Eine Abbildung auf längere Hashwerte mag zwar auf den ersten Blick besser erscheinen, doch können auch Hashverfahren mit weniger Bitlänge durchaus effizienter sein.
Außerdem sollten die Salts noch erwähnt werden und warum man diese benutzen sollte. Ein Salt ist ein (meist) zufälliger String der für jedes Passwort (im besten Fall) anders ist und irgendwo in der Datenbank o.Ä. mit abgelegt ist. Salts sind nämlich nicht dafür da, dass Passwort einfach zu verlängern, sondern um Wörterbuchattacken auszuschließen. Weiterhin erkennt man nicht, ob zwei verschiedene Passwörter identisch sind, denn: PasswortXY+SaltA != PasswortXY+SaltB
100%ige Sicherheit gibts nich und wirds nie geben, jede Verschlüsselung ist "knackbar".
Hat auch niemand behauptet... man spricht hier auch wenn nur von "mit sehr hoher Wahrscheinlichkeit" etc.
Wenn dir MD5 und SHA zu unsicher sind, schlag ihm doch eine in deinen Augen sichere Verschlüsselung vor...
Hättest du mal den Code oben angeschaut, hättest du gesehen, dass dort weitere Sha Verfahren mit drin sind. Wären die auch so extrem unsicher wie MD5 und SHA1, dann hät ich es erwähnt. Aber okay, gute Verfahren sind momentan noch (Sha256), Sha512 und Whirlpool.
Und ja, SSL ist natürlich von Vorteil, stand hier aber erstmal nicht zur Debatte. Bei md5 kannste das Passwort auch gleich als Plaintext speichern.
@I N X S: Mag zwar sein, dass Sicherheit aktuell noch nicht so die große Rolle spielt, aber da es nicht allzu viel Aufwand ist, kannst du die Passwörter schon vernünftig ablegen.
(Hoffe die Sache ist nun etwas klarer).