Teil von  SELFPHP
  +++ SELFPHP CronJob-Service :: Jetzt auch als Professional-Version verfügbar! +++



:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: SELFPHP Forum ::

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

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

:: Qozido ::

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.   

 
 
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


 


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.


 




:: Premium-Partner ::

Webhosting/Serverlösungen


Premium-Partner MECO Systemhaus GmbH & Co. KG
Premium-Partner PSW GROUP GmbH & Co. KG
Premium-Partner BPI-Systeme
Premium-Partner Pixel X
Premium-Partner
 

:: SELFPHP Sponsoren ::


Microsoft Deutschland GmbH
twosteps.net - ...Premium-Webhosting
Sedo - Bei uns wird PHP großgeschrieben
hostfactory.ch - OptimaNet Schweiz AG
ZEND - The PHP Company
Kaspersky Labs
HighText iBusiness
SELFPHP Sponsoren
 

Qozido


© 2001-2009 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt