XOR-Verschlüsselung in PHP

klausschreiber

Well-known member
ID: 162475
L
6 Mai 2006
247
8
Hallo,

ich brauche eine XOR-Verschlüsselung in PHP.
Wie man das Umsetzen kann, habe ich in folgendem Thread gefunden: https://www.klamm.de/forum/showthread.php?t=151875
und dann zum Testen erstmal folgendermaßen gemacht:
PHP:
if(isset($_POST['submit']) && !empty($_POST['string']) && !empty($_POST['secret'])) {
    $string = $_POST['string'];
    $secret = $_POST['secret'];
    $string = $string ^ str_pad($secret,strlen($string),$secret);
    echo $string . "<br />";
    $string = $string ^ str_pad($secret,strlen($string),$secret);
    echo $string;
}
Leider führt das jedoch nicht zum gewünschten Ergebnis. Ich habe zum Testen mal eine Kombination genommen, wo ein anzeigbarer Buchstabe rauskommt.
Verschlüssel ich den Text "A" mit dem Passwort "1" kommt bei meinem Script als verschlüsselter Text "p" raus. Bei dem Programm CrypTool, das die Texte so ver- und entschlüsselt, wie von mir gewünscht, kommt jedoch als verschlüsselter Text "Q" raus.
Wisst ihr, woran das liegt? Ich kenne mich mit der XOR-Verschlüsselung leider gar nicht aus und habe nur ein bischen nach gegoogelt.

P.S. In diesem Script ist "$string" der zu verschlüsselnde oder bereits verschlüsselte Text und "$secret" ist das Passwort.


Gruß und schon vielen Dank im Vorraus,
Klaus


edit:
lolm habs jetzt mal von Hand mit Stift und Papier versucht und bekomme nun noch eine dritte Variante raus.
 
Zuletzt bearbeitet:
lol, bin ich dumm. Ich hatte nicht gesehen, dass das Verschlüsselungsprogramm den eingegebenen Code als Hexdezimalzeichen nimmt. Hatte wohl beim testen zufällig nur hexdezimale Zeichen eingegeben.

Habe jedoch jetzt vor, den Schlüssel auch im Script als Hexdezimalzeichen anzugeben. Ich habe in PHP aber keine direkte Möglichkeit gefunden, ein Hexdezimales Zeichen in ein Ascii-Zeichen umzuwandeln. Habe es deshalb erst in Dezimal umgewandelt und dann in Ascii. Ist das so korrekt?
PHP:
    $string = $_POST['string'];
    $secret = $_POST['secret'];
    $secret = hexdec($secret); // Umwandlung Von Hexdezimal zu Dezimal
    $secret = chr($secret); // Rueckgabe des entsprechenden Ascci-Zeichens
    $string = $string ^ str_pad($secret,strlen($string),$secret);
    echo $string . "<br />";
    $string = $string ^ str_pad($secret,strlen($string),$secret);
    echo $string;