Moin!
Kann mir jemand in klaren Wörtern den Unterschied zwischen kodieren und crypten nennen ? Ein Beispiel wäre hilfreich ... danke :)
Kodieren ist ein Vorgang, bei dem ein Symbol aufgrund einer ein-eindeutigen Zuordnung in ein anderes Symbol übersetzt wird, und wieder zum vorhergehenden Symbol zurückübersetzt werden kann.
"Symbol" ist deshalb so allgemein formuliert, weil darunter sowohl "Bytes" fallen, als auch "Buchstaben", "Ziffern", "Zahlen" etc.
Beispiele: Wenn ich den Buchstaben "großes A" codieren will, nehme ich zum Beispiel die ASCII-Tabelle, gucke nach, welcher Bytewert dem zugeordnet ist, und erhalte "65" bzw. "0x41". Habe ich den Bytewert "65" und will wissen, welcher ASCII-Buchstabe das ist, gucke ich ebenfalls in der Tabelle nach und weiß es.
Das geht auch mit komplexeren Vorgängen, wie beispielsweise der bei EMail angewandten Umwandlung von 8-Bit-Attachments in codierten Text, der nur 7-Bit-Zeichen verwendet. Da werden dann aus 3 8-Bit-Zeichen 4 7-Bit-Zeichen, und zurückwandeln kann man die natürlich auch.
Wichtig ist: Bei einer Codierung ist für jedes mögliche Eingangssymbol ganz eindeutig ein Ausgangssymbol festgelegt, und jedes Ausgangssymbol hat auch nur exakt ein Eingangssymbol - ansonsten könnte man bei der Rückwandlung nicht mehr entscheiden, welches Eingangssymbol gemeint war.
"Crypten" ist dagegen ein nicht so eindeutig formulierter Begriff, weil er im Sinnzusammenhang mehrere Bedeutungen haben könnte.
Wenn er sich tatsächlich auf "crypt" bezieht, dann ist die Funktion gemeint, die aus den ersten 8 Zeichen eines Passwortes unter Unix einen Hash mit Salt errechnet, das Ausgangspasswort aber nicht wieder zurückrechnen kann.
Weil crypt() mittlerweile nicht die einzige Funktion ist (und aufgrund der Passwortlängenbegrenzung extrem veraltet und sicherheitstechnisch unzureichend), wird "crypten" ggf. auch auf die Anwendung von md5(), sha1() und Konsorten angewandt. Eine technisch bessere Ausdrucksweise wäre "hashen", weil diese Funktionen tatsächlich einen Hashwert berechnen, den man eben nicht zurückrechnen kann auf den Eingangswert.
"Crypten" kann sich aber auch auf Kryptografie allgemeiner beziehen, und die echte, umkehrbare Verschlüsselung meinen. Bei Verschlüsselung wird ein Text mit einem Passwort verknüpft und kann ohne Kenntnis des Passwortes nicht wiederhergestellt werden (zumindest in der Theorie, es hängt natürlich vom Verschlüsselungsmechanismus ab, ob dieser Vorgang wirklich sicher ist).
Obwohl bei allen drei genannten Vorgängen (Codierung, Hash, Verschlüsselung) aus einem evtl. lesbaren Text ein komplett unlesbarer "Code" entsteht, ist der entscheidende Unterschied der, dass man bei der Codierung problemlos wieder zurück zum Text kommt, bei der Verschlüsselung benötigt man dazu das Passwort, und beim Hash ist es komplett unmöglich.
Es ist daher in den Fällen, die Sicherheit bringen sollen, unbedingt erforderlich, dass der Programmierer weiß, was er da gerade macht. Es bringt nichts, ein Passwort nur zu codieren, wenn beabsichtigt ist, dass niemand daran kommen soll. Umgekehrt ist es ebenso unsinnig, aus einem Text einen Hash zu berechnen, wenn man später den Text wieder benötigt. :)
- Sven Rautenberg
"Love your nation - respect the others."