Systemvoraussetzung
- Linux
- Windows
- PHP 3
- PHP 4
- PHP 5
Datei(en)
bitshifting.php
Problem
Wie kann man eine einfache Verschlüsselung mit PHP realisieren, wenn bestimmte
Servervoraussetzungen nicht für eine richtige Verschlüsselung ausreichend
sind? Wie sicher sind dann diese Daten?
Lösung
Ich möchte eines vorwegnehmen. Sie sollten mit diesem Beispiel keine wichtigen
Daten verschlüsseln, da der Schutz nicht ausreichend ist. Wir zeigen
Ihnen hier nur einen Ansatz, wie und was man mit Bit-Verschiebung
erreichen
kann. Sie werden sehen, dass dieser Ansatz nicht nur für Verschlüsselungen
herhalten, sondern sehr viele andere Anwendungsgebiete abdecken kann.
Das folgende Programm ist ebenfalls von Daniel Kressler, der für Sie hier den
Programmcode für das Bit-Shifting
erstellt und beschrieben hat.
function BitShifting($str_Input)
@param string $file
@return mixed
Im Einzelnen macht die Funktion nichts anderes, als dass sie jeden Buchstaben
in seinen Binärwert umwandelt und die 8 Bits (1 Bit = 1 Ziffer (0/1)) in ihrer
Anordnung ändert. Das führt dazu, dass der daraus resultierende Binärwert,
umgewandelt in das darstellbare Zeichen, unlesbar wird.
Eine kleine Besonderheit an dieser Funktion ist, dass zum Verschlüsseln und
zum Entschlüsseln ein und dieselbe Funktion genutzt wird. Das wurde erreicht, indem die Bitanordnung in einer logischen Ordnung steht.
Ein Beispiel (mit
Beispielwerten):
Bei der Verschlüsselung Bit von Position 3 auf Position 0 verschieben:
0...1... wird zu 1...0... |
Beim Entschlüsseln verschieben sich die Bits in gleicher Ordnung:
1...0... wird zu 0...1... |
Somit ist die Original-Ordnung
wiederhergestellt. Bitte beachten Sie, dass die
Positionsnummern der Bits mit 0 beginnen, sprich Bit 1 hat Position 0, Bit 2
hat Position 1, Bit 3 hat Position 2 usw., bis Bit 8, das Position 7 innehat.
An dieser Stelle möchte ich ausdrücklich darauf hinweisen, dass diese Bit-Shifting
NICHT sicher genug ist, um sicherheitsrelevante Daten zu chiffrieren.
Dafür müsste die Funktion um Einiges erweitert werden. Hier dient sie nur als
Denkanstoß!
Wir widmen uns nun dem Programmcode und schauen, wie er aufgebaut ist.
Die Funktion Bit-Shifting
erwartet als einzigen Parameter einen String, den wir
im nächsten Schritt (6) auf seinen Inhalt hin überprüfen. Falls es sich dabei
um keinen String handeln sollte, geben wir eine Fehlermeldung zurück an die
aufrufende Stelle und beenden die Funktion.
War der Inhalt ein String, so zählen (10) wir die Länge des Stringinhalts und
speichern diese in unsere Variable. Wir definieren im Vorfeld unsere Variable
(12), um dort später unseren String zu speichern, den wir mit dem Bit-Shifting
verändert haben. Wir durchlaufen dann für jedes Zeichen in unserem String
die FOR-Schleife
(14) und setzen das jeweilige Bit.
Anhand einer Aufzählung schauen wir uns nun die einzelnen Schritte an, da
im Fließtext die Vorgehensweise schwerer zu verstehen ist.
Zeile 16 |
Den Dezimalwert eines Zeichens holen |
Zeile 19 |
Dezimalwert in Binärwert konvertieren |
Zeile 21 |
Ist der Binärwert nicht 8 Bit „lang“, wird so oft eine 0 vor den
Binärwert gehängt, bis der Binärwert 8 Bit hat. |
Zeile 23 |
Bit von Position 3 auf Position 0 verschieben |
Zeile 26 |
Bit von Position 4 auf Position 1 verschieben und dem vorigen Bit
anhängen |
Zeile 29 |
Bit von Position 2 auf Position 6 verschieben und an den vorigen Bit
hängen |
Zeile 32 |
Bit von Position 0 auf Position 3 verschieben und an den vorigen Bit
hängen |
Zeile 35 |
Bit von Position 1 auf Position 4 verschieben und an den vorigen Bit
hängen |
Zeile 38 |
Bit von Position 7 auf Position 5 verschieben und an den vorigen Bit
hängen |
Zeile 41 |
Bit von Position 6 auf Position 2 verschieben und an den vorigen Bit
hängen |
Zeile 44 |
Bit von Position 5 auf Position 7 verschieben und an den vorigen Bit
hängen |
Zeile 47 |
Binärwert von $str_bits nach Dezimal konvertieren |
Zeile 49 |
Dezimalwert in Zeichen umwandeln |
Zum Schluss müssen wir lediglich unseren verschlüsselten String an die aufrufende
Stelle zurückgeben (52).
04:
05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54:
|
function BitShifting($str_Input)
{
if(!is_string($str_Input)) { return 'Fatal error: Argument <i>$str_Input</i> ist nicht vom Typ String!'; }
$int_Lenght = strlen($str_Input);
$str_Output = '';
for($i = 0; $i < $int_Lenght; $i++){
$int_Char = ord($str_Input{$i});
$str_CharBin = decbin($int_Char);
$str_CharBinary = str_pad($str_CharBin, 8, 0, STR_PAD_LEFT);
$str_Bits = $str_CharBinary{
3};
$str_Bits .= $str_CharBinary{
4};
$str_Bits .= $str_CharBinary{
6};
$str_Bits .= $str_CharBinary{
0};
$str_Bits .= $str_CharBinary{
1};
$str_Bits .= $str_CharBinary{
7};
$str_Bits .= $str_CharBinary{
2};
$str_Bits .= $str_CharBinary{
5};
$int_CharNew = bindec($str_Bits);
$str_Output .= chr($int_CharNew); }
return $str_Output; } |
Beispiel 12.10: bitshifting.php
Der Aufruf der Funktion für das Bit-Shifting
ist eher unspektakulär. Sie müssen
lediglich den zu verschlüsselnden String an die Funktion Bit-Shifting()
(58)
übergeben. Genauso verhält es sich mit dem Entschlüsseln. Hier wird ebenfalls
der verschlüsselte String an die Funktion übermittelt.
56: 57: 58: 59:
60:
61:
62: | $str_String = 'Daniel Kressler';
$str_Encrypted = BitShifting($str_String);
$str_Decrypted = BitShifting($str_Encrypted);
echo 'String verschlüsselt: <b>', $str_Encrypted, '</b>', "\n<br>\n", 'String entschlüsselt: <b>', $str_Decrypted, '</b>'; |
Beispiel 12.11: bitshifting.php
Wie Sie sehen, haben wir hier eine einfache und schnelle Art der Verschlüsselung
erstellt. Diese Verschlüsselung kann ohne weiteres für unwichtige Daten
genutzt werden. Sollten Sie allerdings sensible Daten verschlüsseln wollen,
können Sie auf das Beispiel „Rijndael“ hier im Buch zurückgreifen. Dieser Programmcode,
der in einem späteren Kapitel beschrieben wird, ist für sensible
Daten geeignet und ausgelegt.
Ausgabe im Browser
String verschlüsselt: k?N’K?lK#
String entschlüsselt: Daniel Kressler |
Dieses Skript aus dem SELFPHP KOCHBUCH wurde von SELFPHP unter dem "Tarif Mc500" von McAc.net-Webhosting erfolgreich ausgeführt und getestet!
Auf der Übersichtseite unter "McAc.net – Webhosting zu diesem Buch" finden Sie weitere Informationen zu dem Webhostingpaket, dass durch SELFPHP getestet wurde.
|