Teil von  SELFPHP
Letztes Update: 14.09.2007 09:07:01

Navigation

Seite Startseite
Seite Aktuelles
Seite Seite News*
Seite Seite Pressemitteilungen*
Seite SELFPHP
Seite Seite Über SELFPHP
Seite Seite Werbung
Seite Seite Kontakt
Seite Seite Unsere Banner
Seite Seite Impressum
Seite Qozido
Seite Seite Diving Edition
Seite Seite Snorkeling Edition
Seite SELFPHP Dokumentation
Seite Seite PHP-Skripte
Seite Seite PHP Befehlsreferenz
Seite Seite PHP 5 Praxisbuch
Seite Seite PHP Code Snippets
Seite Seite SELFPHP in Buchform
Seite Anbieterverzeichnis
Seite Seite Globale Branchen
Seite Seite Webhosting/Server
Seite Services
Seite Seite Forum*
Seite Seite RSS-Feeds*
Seite Seite Downloads*
Seite Seite Gratis-Video-Lektionen*
Seite Seite SELFPHP auf Heft-CD*
Seite Seite Newsletter*
Seite Internet Security
 sponsored by  
Seite Stellenangebote*
Sedo - Bei uns wird PHP großgeschrieben
Seite Premium-Partner   
Webhosting/Serverlösungen
Seite Produktempfehlung   
Seite Seite SteadyBackup

 
* 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 100.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

Sedo - Bei uns wird PHP großgeschrieben


VERIO - An NTT Communications Company


HighText iBusiness


Webspace-Verkauf.de


video2brain




 Premium-Partner
 Webhosting/Serverlösungen

BPI-Systeme


Premium-Partner Pixel X


Premium-Partner First Colo


Premium-Partner dogado Internet




Qozido


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