Performance Problem [PHP]

Hallo,
Ich hab mir ein Verschlüssler und auch einen Endschlüssler mit php gemacht mein Problem:
Wenn ich es auf Localhost teste wird mein PC langsam und apache geht mit den Prozess auf 100% …

Nun ich verschlüssle so:

Wie kann ich es schneller machen ?

Soll heißen du tauscht einfach nur ein Paar Buchstaben mit andere Buchstaben aus?
Wieso machste es nicht wie eine “normale” Verschlüsselung, in dem du einen Schlüssel darauf anwendest?
Das was du verwendest nennt Wikipedia: “Monoalphabetische Substitution”.

Hier ein kleines Beispiel für eine Verschlüsselung mit Schlüssel (Simple XOR Verknüpfung):

[code]<?php

//Verschlüsseln
function encrypt($text, $key){
$k = 0;
$code = “”;
for($n=0; $n<strlen($text);$n++){
$code .= chr(ord($text{$n}) ^ ord($key[$k])); //XOR
$k++;
if($k>=strlen($key)) $k = 0;
}
return $code;
}

//Entschlüsseln
function decrypt($text, $key){
$k = 0;
$code = “”;
for($n=0; $n<strlen($text);$n++){
$code .= chr(ord($text{$n}) ^ ord($key[$k])); //XOR
$k++;
if($k>=strlen($key)) $k = 0;
}
return $code;
}

//Text der verschlüsselt werden soll:
$text = “Irgendein text”;

//Schlüssel:
$key = “key”;

$code = encrypt($text, $key); //verschlüsseln

$plain = decrypt($code, $key); //entschlüsseln

echo $plain;

?>[/code]

jetzt ist das natürlich recht simpel, da der entschlüsselungs und verschlüsselungs algorithmus genau der selbe ist.
Man kann natürlich noch ein paar sachen hineinbauen, dann muss man beim entschlüsseln halt alles exakt in umgekehrter reihenfolge machen.

möchtest du den verschlüsselten text speichern, würde ich es zustäzlich mit base64 kodieren. Dann sollte es keine Probleme mit den binären Daten geben.

mfg Balmung

[quote=“Balmung”]Soll heißen du tauscht einfach nur ein Paar Buchstaben mit andere Buchstaben aus?
Wieso machste es nicht wie eine “normale” Verschlüsselung, in dem du einen Schlüssel darauf anwendest?
Das was du verwendest nennt Wikipedia: “Monoalphabetische Substitution”.

Hier ein kleines Beispiel für eine Verschlüsselung mit Schlüssel (Simple XOR Verknüpfung):

[code]<?php

//Verschlüsseln
function encrypt($text, $key){
$k = 0;
$code = “”;
for($n=0; $n<strlen($text);$n++){
$code .= chr(ord($text{$n}) ^ ord($key[$k])); //XOR
$k++;
if($k>=strlen($key)) $k = 0;
}
return $code;
}

//Entschlüsseln
function decrypt($text, $key){
$k = 0;
$code = “”;
for($n=0; $n<strlen($text);$n++){
$code .= chr(ord($text{$n}) ^ ord($key[$k])); //XOR
$k++;
if($k>=strlen($key)) $k = 0;
}
return $code;
}

//Text der verschlüsselt werden soll:
$text = “Irgendein text”;

//Schlüssel:
$key = “key”;

$code = encrypt($text, $key); //verschlüsseln

$plain = decrypt($code, $key); //entschlüsseln

echo $plain;

?>[/code]

jetzt ist das natürlich recht simpel, da der entschlüsselungs und verschlüsselungs algorithmus genau der selbe ist.
Man kann natürlich noch ein paar sachen hineinbauen, dann muss man beim entschlüsseln halt alles exakt in umgekehrter reihenfolge machen.

möchtest du den verschlüsselten text speichern, würde ich es zustäzlich mit base64 kodieren. Dann sollte es keine Probleme mit den binären Daten geben.

mfg Balmung[/quote]

Nein,
Ich hab mir selber einen gebaut… für etwas…
Nun geht es zu lange mit:

Das:

$codeverschluessler = ereg_replace("A", "...Verschlüsslet...", $codeverschluessler);

kommt etwa 200 x mal vor… :wink:

[b]Nein, ich möchte es nicht mit md5(), base64()…ect verschlüsseln…
[/b] :wink:

LG

[quote=“fishi”]

[b]Nein, ich möchte es nicht mit md5(), base64()…ect verschlüsseln…
[/b][/quote]
md5 ist ein hash, base64 ist eine kodierung. Keines davon ist imho zum Verschlüsseln geeignet, von daher würd ich das auch niemals als alternative erwähnen.

Da dein Script 200 Mal sowas macht, was auch immer es macht, könnte es vielleicht daran liegen, dass es so performance lastig ist, weil es so oft gemacht wird?

mfg Balmung

Edit: wen ereg_replace() nur buchstaben austauschen soll, kannste doch auch einfach str_replace() nutzen. Ob es schneller ist weiß ich nicht, nehm ich aber an, da dort kein RegExp angewendet wird.

[size=85]Edit: btw. ich weiß nicht was andere davon halten, aber du brauchst nicht meinen GANZEN Text zu zitieren.[/size]

Moin,

// ganz am Anfang des Scripts
$start_zeit = time();
$array = ('A' => 'Verschlüsselung',
             'B' => 'Verschlüsselung',
             ....);
foreach($array AS $key => $value) { $text = str_replace($key, $value, $text); }
foreach($array AS $key => $value) { $text = str_replace($value, $key, $text); }
// Am Ende:
$end_zeit = time();
echo $end_zeit-$start_zeit; // Dauer des Scripts ausgeben.

Na ja, Prinzip sollte deutlich sein. Sehr simpel gehalten :wink: str_replace() tuts in der Art auch und dürfte schneller sein. Natürlich kann man auch die ereg-Varianten benutzen - ein $end_zeit-$start_zeit hilft da weiter.

MfG
myPages

Mann…

$str="Test";
$key="schlüssel, der mind. so lange wie der String ist";

$encodet=$str ^ $key;

wenn du encodet noch durch base64 laufen lässt, kommt ein schöner, allgemein verwendbarer String raus :wink:

Ich glaube ihr habt mich faltsch verstanden:

Ich Verschlüssle so:

$codeverschluessler = ereg_replace("A", "...Verschlüssletes..a ...", $codeverschluessler);

Entschlüssle so:

$codeverschluessler = ereg_replace("...Verschlüssletes..a ...", "A", $codeverschluessler);

Aber mit “ereg_replace” geht es zu lange

Auszug aus php.net über str_replace():

Du machst also nichts anderes, als den Buchstaben “A” mit igendeinem anderem zeichen auszutauschen? und das mehrmals und mit allen Zeichen/Buchstaben?

Ich meine, wir geben dir Lösungsvorschläge, wie es schneller und sogar effektiver geht. Ein bisschen genauer erklärt, vll mit ein paar Beispielen (musst ja nicht deinen originalen Algorithmus nehmen) wäre es vielleicht bissel besser verständlich.

Edit: und wenn du tatsächlich “nur” Austauschen möchtest, @Steditor hats zitiert, verwende lieber str_replace():

mfg Balmung

Deine “Verschlüsselung” ist so ziemlich das schlechteste, was überhaupt möglich ist…

Ich hab dir meinen Vorschlag gezeigt, entschlüsseln geht gleich wie verschlüsseln und vor allem: es ist verdammt schnell und sicher :wink:

[quote=“michi7x7”]Deine “Verschlüsselung” ist so ziemlich das schlechteste, was überhaupt möglich ist…

Ich hab dir meinen Vorschlag gezeigt, entschlüsseln geht gleich wie verschlüsseln und vor allem: es ist verdammt schnell und sicher :wink:[/quote]

Du hast das PHP-Srcipt nicht gesehen… :wink:

So wie es ausseht kann mir niemand helfen… :neutral_face:

hast du denn schon str_replace() probiert? (hast du meinen Beitrag überhaupt gesehen?)

Ich bin für closen…Fehlende Mitarbeit

ja…geht nicht schneller … :astonished:

dann liegt es an dem Volumen deines Codes. was “besseres” als str_replace gibt es für deine Belange (soweit ich weiß) nicht.

natürlich nicht…es macht ja genau das gleiche o.0
deswegen hab ich ja die XOR-Verschlüsselung vorgeschlagen, die ist rein binär und somit extrem schnell…

[quote=„michi7x7“]natürlich nicht…es macht ja genau das gleiche o.0
deswegen hab ich ja die XOR-Verschlüsselung vorgeschlagen, die ist rein binär und somit extrem schnell…[/quote]

oh… :susp:

Ich will für etwas eine „Verschlüsslung“ programmieren…
und nicht mit „Normalen“ verschlüsselungen das verschlüsseln…

hmm…dann muss ich es irgend wie anderst machen…

wiso??? :astonished:

probier mal folgenden Code:

<?php

$str="Das ist ein streng geheimer Code, der auf keinen Fall einfach so entschlüsselt werden darf!!!";
$key="Das ist ein streng geheimer Schlüssel, der auf keinen Fall weiter gegeben werden darf";

while(strlen($str) > strlen($key)) $key .= $key;

$encoded = base64_encode($str ^ $key);
echo "Verschlüsselt: $encoded \n";

$decoded = base64_decode($encoded) ^ $key;
echo "Entschlüsselt: $decoded \n";

Will ich etwas will machen…darum…

[size=85]So schwer zu verstehen michi7x7 das ich es selber verschlüsseln & entschlüsseln will mit mein Script, und nicht mit bas64 und so… … :neutral_face: :whata:
[/size]

so wie es ausseht kann ich das vergessen. Scheise* :cry:
Danke für die Hilfe …
[size=200]Kann geschlossen werden.[/size]

so schwer zu verstehen, dass base64 hier nicht als verschlüsselung genutzt wird?

die zeile:
$encoded = base64_encode($str ^ $key);

das zeichen “^” ist es, was die Verschlüsselung darstellt.

Das Ergbnis sind Binäre Daten aus, die im Browser nicht darstellbar sind, weshalb base64 lediglich dazu genutzt wird, um eine “vernünftige” Ausgabe zu erzeugen, die “leserlich” ist, da es sich bei base64 um eine Kodierung handelt, die genau für diesen Zweck gedacht ist.