Xor-Verschlüsselung in PHP

Ich bin neu Xor-Verschlüsselung, und ich habe einige Schwierigkeiten mit dem folgenden code:

function xor_this($string) {

//Let's define our key here
 $key = ('magic_key');

 //Our plaintext/ciphertext
 $text =$string;

 //Our output text
 $outText = '';

 //Iterate through each character
 for($i=0;$i<strlen($text);)
 {
     for($j=0;$j<strlen($key);$j++,$i++)
     {
         $outText .= $text{$i} ^ $key{$j};
         //echo 'i='.$i.', '.'j='.$j.', '.$outText{$i}.'<br />'; //for debugging
     }
 }  
 return $outText;
}

Wenn ich diesen starte, es funktioniert für normale Zeichenfolgen, wie 'Hund', aber es nur teilweise funktioniert für strings, die Ziffern enthalten, wie z.B. '12345'.

Demonstrieren...

xor_this('dog') = 'UYV'

xor_this('123') = "

Es ist auch interessant zu beachten, dass xor_this( xor_this('123') ) = '123', wie ich es erwarten. Ich bin mir ziemlich sicher, dass das problem befindet sich irgendwo in meinem wackeligen Verständnis von bit-Operatoren, ODER vielleicht der Weg von PHP verarbeitet strings, die zahlen enthalten. Ich Wette, da ist jemand clever aus, dass es weiß, was genau hier falsch. Danke.

EDIT #1: Es ist nicht wirklich 'Verschlüsselung'. Ich denke, Verschleierung ist der richtige Begriff, das ist, was ich Tue. Ich übergeben zu müssen, ein code mit unwichtigen Daten von einem Benutzer, ohne dass Sie in der Lage, leicht zu manipulieren es. Sie sind der Abschluss eines zeitlich Aktivität off-line und übermitteln Sie Ihre Zeit, um ein online-Anzeiger über diesen code. Die off-line-Aktivität verschleiern Ihrer Zeit (in Millisekunden). Ich muss ein Skript schreiben, diesen code zu erhalten und ihn wieder in die Zeichenfolge, die zu Ihrer Zeit.

  • Ich hoffe, Sie nicht zu verwenden beabsichtigen, dies für etwas mehr als Hausaufgaben 😛
  • Versuchen casting $string einen string wie: $string = (string)$string. Auch, beachten Sie, dass "Verschlüsselung" ein ziemlich starkes Wort für XORing Dinge, also verwenden Sie diese nicht in einer Produktionsumgebung.
  • Sie arbeiten zu hart. PHP wird gerne verknüpft jedes Zeichen einer Zeichenkette, und geben Sie das Ergebnis als eine andere Zeichenfolge ein. Sie brauchen nicht eine Schleife, es selbst zu tun, nur tun $str1 ^ $str2. Aber WATCH OUT! Der Ergebnis-string so lang wie die kürzeste Zeichenfolge! (Einschließlich der leeren Zeichenfolge!) Also pad die Saiten zuerst, oder haben Sie Sie in Stücke.
  • Ihr wohl sicherer UND haben viel weniger Arbeit, wenn Sie nur einige der eingebauten encoding/decoding-Funktionen, die php bereits hat. Zum Beispiel die mcrypt-Funktionen. Die phpdoc-Seite hat Beispiele.
InformationsquelleAutor emersonthis | 2011-09-25
Schreibe einen Kommentar