Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
PHP: RC4 Stromchiffre
gandro Offline
Quälgeist

Beiträge: 8.951
Registriert seit: Jul 2008
Beitrag #1
PHP: RC4 Stromchiffre
Aus Langeweile und ggf. für spätere Projekte (yafu2) habe ich mir dieses Wochenende eine RC4-Implementation für PHP gebastelt.

Solche gibt es zwar bereits einige, doch wollte ich eine Implementation die Public Domain, also gemeinfrei, ist. Zudem ist meine Implementation nicht eine Verschlüsselungsfunktion, sondern eine PHP-Streamklasse, das eigentliche Verknüpfen der Daten müsst ihr selber vornehmen.

Die Funktionsweise von RC4 ist in der Wikipedia nachzulesen, wichtig zu wissen ist eigentlich nur, dass RC4 eine Stromchiffre ist und somit unendlich lange Chiffren erzeugt, die man danach mit seinen Daten XOR-Verknüpfen kann.

Wem das jetzt zu verwirrend ist, der schaue sich folgendes Code-Schnippsel an:

Beispielcode:
PHP-Code:
/* Klasse als Streaming-Protokoll registrieren */
stream_wrapper_register("rc4""RC4Stream");

/* Stream öffnen */
$rc4Stream fopen("rc4://geheimerSchluessel""r");

/* Klartext definieren */
$plainText "Dies ist ein streng geheimer Satz.";
echo(
"Klartext: ".$plainText."\n");

/* Chiffrenstrom für die Länge des Klartextes holen */
$cipherStream fread($rc4Streamstrlen($plainText));

/* Die beiden Strings verknüpfen und somit den Text verschlüsseln */
$encryptedText $plainText $cipherStream;
echo(
"Verschlüsselter Text (hexdezimal): ".bin2hex($encryptedText)."\n");

/* Das ganze noch einmal um den Text wieder zu entschlüsseln */
$plainText $encryptedText $cipherStream;
echo(
"Klartext: ".$plainText."\n");

/* Bonus: Anzeige, wie viele Bytes an Chiffren bereits generiert wurde */
echo("Bisherige Stromlänge: ".ftell($rc4Stream));

/* Stream schliessen */
fclose($rc4Stream); 
Ausgabe:
Zitat:Klartext: Dies ist ein streng geheimer Satz.
Verschlüsselter Text (hexdezimal): dfeea1f9556672672f...32ebd1
Klartext: Dies ist ein streng geheimer Satz.
Bisherige Stromlänge: 34
Das Password wird via fopen() mitgeteilt und mit fread() enthält man dann die Stromchiffre. Funktionen wie fwrite() oder feof() funktionieren selbstverständlich nicht, da der Strom unendlich und unveränderlich sein muss.

Hier die Klasse als PHP-Code:

21.09.2008 13:06
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste