SELFPHP

Bit Shifting



Informationsseite

nach unten Autor
nach unten Beispiel
nach unten Ausgabe
nach unten Beschreibung
nach unten Download

nach unten 

Autor

Name: Daniel Kressler
Email: E-Mail d.kressler@selfphp.info
Website: http://www.selfphp.info

 

nach obennach unten 

Beispiel

<?php
// Gibt es Syntaxfehler im Script?
// Das beantwortet "error_reporting()".
error_reporting(E_ALL);

// Die Funktion BitShifting erwartet nur ein
// Argument, dieses muss aber vom Typ String sein.
function BitShifting($str_Input){

    
// Pruefen ob $str_Input vom Typ String ist.
    
if(!is_string($str_Input)){
        
        
// Wenn nicht, dann Fehlermeldung
        // zurueckgeben und Script beenden.
        //
        // Info: Nach Ausführung eines 'return' gilt
        // die jeweilige Funktion IMMER als beendet.
        
return 'Fatal error: Argument <i>$str_Input</i> ist nicht vom Typ String!';
    }

    
// Anzahl der Zeichen von $str_Input ermitteln
    // und Wert in Variable $int_Lenght laden.
    
$int_Lenght = strlen($str_Input);

    
// Variable $str_Output deklarieren sonst
    // gibt error_reporting(E_ALL) eine
    // 'Notice' aus.
    // "Notice: Undefined variable: ..."
    
$str_Output = '';

    
// Diese for-Schleife wird so oft ausgefuehrt
    // bis $i < $str_Lenght entspricht.
    
for($i = 0; $i < $int_Lenght; $i++){

        
// Den Dezimalwert eines Zeichens holen
        
$int_Char = ord($str_Input{$i});

        
// Dezimalwert in Binaerwert konvertieren
        
$str_CharBin = decbin($int_Char);

        
// Fix fuer Zeichen deren Binaerwert nicht 8 Bit betraegt. Ist
        // der Binaerwert nicht 8 Bits "lang", wird so oft eine 0 vor
        // den Binaerwert gehaengt, bis dass der Binaerwert 8 Bits hat.
        
$str_CharBinary = str_pad($str_CharBin, 8, 0, STR_PAD_LEFT);

        
// Hier begint die eigentliche Verschluesselung durch
        // "Bit shifting" (Neuordnung der Bits).

        // Bit von Position 3 auf Position 0 verschieben.
        
$str_Bits = $str_CharBinary{3};

        
// Bit von Position 4 auf Position 1 verschieben
        // und dem vorigen Bit anhängen.
        
$str_Bits .= $str_CharBinary{4};

        
// Bit von Position 2 auf Position 6 verschieben
        // und dem vorigen Bit anhängen.
        
$str_Bits .= $str_CharBinary{6};

        
// Bit von Position 0 auf Position 3 verschieben
        // und dem vorigen Bit anhängen.
        
$str_Bits .= $str_CharBinary{0};

        
// Bit von Position 1 auf Position 4 verschieben
        // und dem vorigen Bit anhängen.
        
$str_Bits .= $str_CharBinary{1};

        
// Bit von Position 7 auf Position 5 verschieben
        // und dem vorigen Bit anhängen.
        
$str_Bits .= $str_CharBinary{7};

        
// Bit von Position 6 auf Position 2 verschieben
        // und dem vorigen Bit anhängen.
        
$str_Bits .= $str_CharBinary{2};

        
// Bit von Position 5 auf Position 7 verschieben
        // und dem vorigen Bit anhängen.
        
$str_Bits .= $str_CharBinary{5};

        
// Binaerwert von $str_bits nach Dezimal konvertieren.
        
$int_CharNew = bindec($str_Bits);

        
// Dezimalwert in Zeichen umwandeln.
        
$str_Output .= chr($int_CharNew);
    }

    
// Rückgabe des verschluesselten Strings.
    
return $str_Output;
}



/**************************************************************************************/
/*******************************Applikation der Funktion*******************************/
/**************************************************************************************/

// Teststring
$str_String = 'Daniel Kressler';

// Verschluesseln
$str_Encrypted = BitShifting($str_String);

// Entschluesseln
$str_Decrypted = BitShifting($str_Encrypted);

// Ausgabe des Ver- und Entschluesselten Strings
echo 'String verschl&uuml;sselt: <b>', $str_Encrypted, '</b>',
     
"\n<br>\n",
     
'String entschl&uuml;sselt: <b>', $str_Decrypted, '</b>';
?>

 

nach obennach unten

Ausgabe

String verschlüsselt:  kNKlª®®Kª

String entschlüsselt: Daniel Kressler

 

nach obennach unten 

Beschreibung

Dieses Beispiel zeigt wie einfach sich Kryptographie mit PHP realisieren lässt.

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 die selbe Funktion genutzt wird. Das wurde dadurch erreicht, weil die Bitanordnung, in einer
logischen Ordnung stehen. Ein Beispiel (mit Beispielwerten):

Bei der Verschlüesselung, 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 wieder hergestellt.

Man beachte: Die Positionsnummern der Bits beginnen mit 0, sprich Bit 1 hat Position 0, Bit 2 hat
Position 1, Bit 3 hat Position 2 usw. bis Bit 8, welches Position 7 hat.

An dieser Stelle möchte ich ausdrücklich darauf hinweisen, dass diese Funktion (bitshifting) NICHT
sicher genug ist, um Sicherheitsrelevante Daten damit zu chiffrieren. Dafür müsste die Funktion um
Einiges erweitert werden. Die Funktion dient nur als Denkanastoß!

 

nach obennach unten 

Download

Der Download beeinhaltet folgende Dateien:
  • bitshifting_beispiel.php
  • bitshifting_erklaerung.txt
  • README.TXT
Download starten

 

nach oben
weiter:weiter Seite
zurück:zurück Seite Kryptographie
 

© 2001, 2002, 2003, 2004, 2005 E-Mail Damir Enseleit, mail@selfphp.de