Seite 1 von 2

Buchstaben gleichzeitig ersetzen

Verfasst: 09.01.2010 17:13
von P7BB
Hallo,

ich suche eine Funktion, um Buchstaben in PHP gleichzeitg zu ersetzen. Damit meine ich nicht preg_replac oder str_replace.
Als Beispiel:
Wenn ich den String "abc" habe und nun aus "a" ein "b" mach eund aus "b" ein "c", dann würde das so aussehen:
abc -> bbc -> ccc

Ich möchte aber "bcc" als ergebnis haben. Deshalb dürfen Buchstaben, die eine "Ersetzung" sind nicht ein weiteres mal ersetzt werden. Mit welcher Funktion kann ich das anstellen, bzw. gibt es andere Möglichkeiten dafür? Es geht nicht, dass ich ERST "b" durch "c" ersetze und DANN "a" durch "b", da letztendlich auch "c" durch "a" ersetzt wird. Also prinzipiel wie die Cäsar-Verschlüsslung... ;)

Danke im Vorraus
- P7BB

Edit:
Ich benötige keine Cäsar-Verschlüsslung, wie sie beispielsweise hiermit erstellt werden könnte:
http://go.raidrush.ws/?http://de2.php.net/str_rot13

Ich brauche das ganze für eine andere Verschlüsslung, die ich momentan entwickel, aber die Problematik bleibt diesselbe. ;)

Re: Buchstaben gleichzeitig ersetzen

Verfasst: 09.01.2010 20:58
von 4seven
du müsstest alle strings cachen und dann geordnet verschlüsseln. dabei müsste bis zum abschluß der verschlüsselung das abbild des originalstrings "im raum" stehen bleiben, so das es sauber zeilenweise verschlüsselt werden kann. dann das ganz flushen. umgekehrt gehts dann mit der entschlüsselung. nicht ganz unmöglich, aber ne ziemlich hakelige sache.

Re: Buchstaben gleichzeitig ersetzen

Verfasst: 09.01.2010 21:20
von Pyramide
Warum einfach, wenn es auch kompliziert geht? Ich würde den String einfach Zeichen für Zeichen durchlaufen und diese dann mit einem switch-Block "bearbeiten":

Code: Alles auswählen

$string = 'Hallo Welt abc';
for($i=0; $i<strlen($string); $i++) {
    switch($string[$i]) {
        case 'a': $string[$i] = 'b'; break;
        case 'b': $string[$i] = 'c'; break;
        case 'c': $string[$i] = 'a'; break;
    }
} 
Siehe http://de.php.net/manual/de/language.ty ... ing.substr

Re: Buchstaben gleichzeitig ersetzen

Verfasst: 09.01.2010 21:35
von P7BB
Pyramide hat geschrieben:Warum einfach, wenn es auch kompliziert geht? Ich würde den String einfach Zeichen für Zeichen durchlaufen und diese dann mit einem switch-Block "bearbeiten":

Code: Alles auswählen

$string = 'Hallo Welt abc';
for($i=0; $i<strlen($string); $i++) {
    switch($string[$i]) {
        case 'a': $string[$i] = 'b'; break;
        case 'b': $string[$i] = 'c'; break;
        case 'c': $string[$i] = 'a'; break;
    }
} 
Siehe http://de.php.net/manual/de/language.ty ... ing.substr
Danke, auf die gleiche Lösung bin ich vorhin auch gekommen, aber hatte das mit dem switch nicht gewusst, weshalb ich ein etwas seltsammes (und nicht funktionierendes) script an der stelle benutzt habe ;)

Re: Buchstaben gleichzeitig ersetzen

Verfasst: 09.01.2010 23:45
von 4seven
Warum einfach, wenn es auch kompliziert geht
genauso meinte ich das, top..

Re: Buchstaben gleichzeitig ersetzen

Verfasst: 09.01.2010 23:49
von P7BB
Oh, gut, dass pyramide nochmal seine Methode geschrieben hat, sonst wär ich ehrlich gesagt etwas verzweifelt gewesen, denn deine Methode hörte sich danach an, den kompletten orignalen string zu speichern, statt ihn einfach in ein array aufzuteilen... ;)
Achja: Letztendlich kann man meinen Code nicht mehr entschlüsseln... weder manuell, noch automatisch, noch sonst irgendwie. Praktisch eine Art "neuer" md5-algorythmus ;) :D und es werden nicht einfach buchstaben durch andere ersetzt, sondern die situation ist diesselbe gewesen und ich dachte mir, es ist einfacher das ganze so zu beschreiben, wie ich es getan hab ;)

Re: Buchstaben gleichzeitig ersetzen

Verfasst: 09.01.2010 23:57
von 4seven
war mir im augenblick selber schwer, das zu umschreiben, da nicht ganz alltäglich. die entschlüsselung wäre ohne genau string- und positions-speicherung in einer temporären tabelle wohl tatsächlich unmöglich. und die tabelle würde wiederum die verschlüsselng ad absurdum führen, außer beide genannten informationen würde in so etwas wie eine privat-key geschrieben werden, der sich dann downloadet und den temporären datenbankeintrag löscht. irgendwie sowas.

Re: Buchstaben gleichzeitig ersetzen

Verfasst: 10.01.2010 00:03
von P7BB
Naja, das Problem beim entschlüsseln ensteht erst in weiteren Schritten. Theoretisch wäre das möglich, das mit hohem aufwand möglich, zu entschlüsseln, aber ich denke, selbst bei hohem aufwand kommt nichts sinnvolles bei raus, was einem weiterhilft und 2. werde ich diesen algorythmus nicht weitergeben, da er ja meine eigene Homepage sichern soll, die kommerziell ist und somit wäre eine entschlüsslung des admin-passworts extrem schlimm ;)

Das Beispiel, so wie es aber bis jetzt hier bekannt ist, wäre ohne Probleme entschlüsselbar. Sogar im Kopf, ohne php ;)
denn:
abcdefghijklmnopqrstuvwxyz hallo
bcdefghijklmnopqrstuvwxyza ibmmp
So kann man einfach ablesen, was dort steht ;)

Re: Buchstaben gleichzeitig ersetzen

Verfasst: 11.01.2010 08:13
von gn#36
Falls du dieses Verfahren für Verschlüsselung einsetzen willst würde ich da an deiner Stelle aber noch mal drüber nachdenken. Die einfache Buchstabenersetzung ist eines der am leichtesten zu knackenden Verschlüsselungsverfahren. Das Verfahren tut ja überhaupt nichts gegen Häufigkeitsanalysen oder ähnliches, wenn bisher beispielsweise das e der häufigste Buchstabe war, dann wird das mit seiner Ersetzung hinterher ebenso sein. Dann muss letztlich nur noch die Menge an verschlüsselten Daten groß genug sein um dein Verfahren angreifbar zu machen (wenn du natürlich lediglich ein einziges Passwort verschlüsselst das noch dazu aus einer ganzen Menge zufälligen Zeichen besteht die alle durch andere ersetzt werden dann dürfte das noch einigermaßen sicher sein da dann Häufigkeitsanalysen und ähnliche Angriffe nicht funktionieren dürften, sobald du aber noch weitere Dinge damit verschlüsseln willst würde ich an deiner Stelle lieber was anderes machen).

Re: Buchstaben gleichzeitig ersetzen

Verfasst: 11.01.2010 13:25
von P7BB
gn#36 hat geschrieben:Falls du dieses Verfahren für Verschlüsselung einsetzen willst würde ich da an deiner Stelle aber noch mal drüber nachdenken. Die einfache Buchstabenersetzung ist eines der am leichtesten zu knackenden Verschlüsselungsverfahren. Das Verfahren tut ja überhaupt nichts gegen Häufigkeitsanalysen oder ähnliches, wenn bisher beispielsweise das e der häufigste Buchstabe war, dann wird das mit seiner Ersetzung hinterher ebenso sein. Dann muss letztlich nur noch die Menge an verschlüsselten Daten groß genug sein um dein Verfahren angreifbar zu machen (wenn du natürlich lediglich ein einziges Passwort verschlüsselst das noch dazu aus einer ganzen Menge zufälligen Zeichen besteht die alle durch andere ersetzt werden dann dürfte das noch einigermaßen sicher sein da dann Häufigkeitsanalysen und ähnliche Angriffe nicht funktionieren dürften, sobald du aber noch weitere Dinge damit verschlüsseln willst würde ich an deiner Stelle lieber was anderes machen).
Nein, das hab ich nicht vor. ;) Sagte ich aber auch schon, glaub ich... ;)

Nur für diese Verschlüsselungen muss ich Buchstaben allgemein durch etwas anderes ersetzten, aber ich möchte das Verfahren nicht weiter erleutern, ok? ;)

- P7BB