Teil von  SELFPHP
Letztes Update: 28.07.2006 17:10:04 


Navigation

Seite News *

Seite Startseite
Seite Über SELFPHP
Seite Werbung
Seite Kontakt
Seite Forum *
Seite Download *
Seite SELFPHP Banner *
Seite SELFPHP in Buchform
Seite Newsletter *
Seite Impressum

 
* Link führt ins Internet


Anbieterverzeichnis
Informieren Sie sich über die Unternehmen in unserem Anbieterverzeichnis!  

 


SELFPHP Forum
Fragen rund um die Themen PHP? In über 79.000 Beiträgen finden Sie sicher die passende Antwort!  


Newsletter
Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 



 

Bit-Shifting




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_CharBin80STR_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&uuml;sselt: <b>'$str_Encrypted'</b>',
     
"\n<br>\n",
     
'String entschl&uuml;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



 

 




 sponsored by

Host Europe


HighText iBusiness


Host Europe




© 2001-2006 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt