In vielen Fällen ist es sinnvoll, eine Zeichenkette, die irgendwo abgespeichert werden soll, nicht im Klartext zu speichern, sondern in verschlüsselter Form. Wenn man z. B. ein Passwort in einer Datei oder in einer Datenbank ablegen möchte, und dies dabei nicht verschlüsselt, dann kann jeder, der sich Zutritt zu dieser Datei bzw. zur Datenbank verschafft, dieses Passwort lesen. Wird das Passwort aber in verschlüsselter Form abgelegt, ist es schwierig, dieses zu entschlüsseln, weil der Algorithmus der Verschlüsselung nicht bekannt ist.
In PHP gibt es zum Verschlüsseln einer Zeichenkette die Funktion crypt(). Diese Funktion bekommt als Parameter eine Zeichenkette übergeben, die sie in verschlüsselter Form zurückgibt.
Der Syntax:
crypt(Zeichenkette, [Schlüssel]);
Beispiel:
<?php
/*
* Created on 30.01.2010 by Nico Schubert
*/
$zeichenkette = 'passwort';
echo 'Erster Aufruf ohne SALT:
'.crypt($zeichenkette).'<br>';
echo 'Zweiter Aufruf ohne SALT:
'.crypt($zeichenkette).'<br><br>';
$salt = 'test';
echo 'Erster Aufruf mit SALT:
'.crypt($zeichenkette, $salt).'<br>';
echo 'Zweiter Aufruf mit SALT:
'.crypt($zeichenkette, $salt).'<br>';
?>
Ausgabe:
Erster Aufruf ohne SALT: $1$Z...uL..$oZhNCSVcmwTUR5jmPkULg1
Zweiter Aufruf ohne SALT: $1$fS4.6s4.$vEkB3YilbPYmH9s2D6xJw0
Erster Aufruf mit SALT: te5chwhw0IhZE
Zweiter Aufruf mit SALT: te5chwhw0IhZE
Erklärung:
In der Zeichenkette $zeichenkette wird das Wort "passwort" gespeichert. Beim ersten Aufruf der Funktion wird diese Zeichenkette verschlüsselt und per echo-Anweisung ausgegeben. Beim zweiten Aufruf wird diese bereits verschlüsselte Zeichenkette erneut verschlüsselt und anschließend ausgegeben. Deshalb unterscheidet sich die zweite Ausgabe von der ersten. Beim dritten Aufruf der Funktion wird der optionale Parameter $salt gesetzt, und die Zeichenkette $zeichenkette erneut verschlüsselt. Dies ist eine Variable, die den Wert "test" enthält. Dieser Parameter stellt den Startwert der Verschlüsselung dar. Beim vierten Aufruf wird dann der Inhalt der Variablen $zeichenkette ein viertes Mal verschlüsselt. Die Verwendung des optionalen Parameters $salt hat großen Einfluss auf die Verschlüsselung, was man daran sieht, das sich die Ausgabe vor allem in der Länge deutlich von der Ausgabe unterscheidet, die ohne Angabe von $salt erstellt wurde.
Die Verschlüsselung per crypt()-Funktion ist eine 1-Wege-Verschlüsselung. Das heißt, eine verschlüsselte Zeichenkette kann nicht wieder entschlüsselt werden.