Ankündigung

Einklappen
Keine Ankündigung bisher.

Caesar-Algorithmus - Text kodieren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Caesar-Algorithmus - Text kodieren

    Hallo!

    Ich habe eine Frage zum Caesar-Algorithmus bzw. ROTxx-Algorithmus.
    ROT13 ist eine (theoretisch) recht simple Verschlüsselung, die im zu verschlüsselnden Text jeden der 26 Buchstaben des englischen Alphabets um 13 Buchstaben nach vorne/hinten verschiebt. Beim Caesar-Algorithmus ist es das selbe, nur ist hier die Anzahl Stellen der Verschiebung der Buchstaben variabel.

    ROT13 gibt es schon als Funktion bei PHP, aber leider muss ich den Text mit ROT7 (Alphabet wird um 7 Stellen nach hinten verschoben) ver- und (mit ROT19) entschlüsseln lassen.

    Ich dachte mir, das ist ganz einfach. Es wird beim Verschlüsseln einfach jeder einzelne Buchstabe ersetzt:

    $eingabe=str_replace("a", "t", $eingabe);
    $eingabe=str_replace("b", "u", $eingabe);
    $eingabe=str_replace("c", "v", $eingabe);
    $eingabe=str_replace("d", "w", $eingabe);
    $eingabe=str_replace("e", "x", $eingabe);
    $eingabe=str_replace("f", "y", $eingabe);
    $eingabe=str_replace("g", "z", $eingabe);

    $eingabe=str_replace("t", "m", $eingabe);
    $eingabe=str_replace("u", "n", $eingabe);
    $eingabe=str_replace("v", "o", $eingabe);
    $eingabe=str_replace("w", "p", $eingabe);
    $eingabe=str_replace("x", "q", $eingabe);
    $eingabe=str_replace("y", "r", $eingabe);
    $eingabe=str_replace("z", "s", $eingabe);


    Wenn ich so den Text „abc“ kodieren will, wird „a“ durch „t“ ersetzt und später „t“ durch „m“, weil das Script nicht merkt, ob ein Buchstabe schon ersetzt wurde, oder noch nicht.

    Hat jemand eine Idee, wie man das Problem noch lösen könnte?

    Tulkas

  • #2
    Code:
    function ROTxx($Text, $xx = 7)
    {
       $NeuerText = '';
       for ($i = 0; $i < strlen($Text); $i++)
       {
          $NeuesZeichen = ord(substr($Text,$i,1)) + $xx;
          if ($NeuesZeichen > 90 && $NeuesZeichen < 97)
          {
             $NeuesZeichen = 96 + $NeuesZeichen - 90;
          }
          if ($NeuesZeichen < 65)
          {
             $NeuesZeichen = 65;
          }
          if ($NeuesZeichen > 122)
          {
             $NeuesZeichen = 64 + $NeuesZeichen - 122;
          }
          $NeuerText .= chr($NeuesZeichen);
       }
       return $NeuerText;
    }
    so eventuell?

    Ich hoffe ich hab nix vergessen.

    [€dit] Zur genaueren Recherche zu empfehlen:
    Im PHP-Manual: ord() & chr()
    Eine ASCII-Tabelle

    Kommentar


    • #3
      Du kannst das ganze als Arrays übergeben .. str_replace sorgt dann selbst dafür, nichts mehrfach zu ersetzen.

      Kommentar


      • #4
        Juhu!

        So habs endlich hingekriegt! Danke für eure Hilfe!

        Tulkas

        Kommentar


        • #5
          problem gelöst.
          thread closed.

          sollte der threaderöffner wünschen, dass dieser thread wieder geöffnet wird .. bitte eine PM an mich

          grüße ben ..
          [b][url=http://www.benjamin-klaile.de]privater Blog[/url][/b]

          Kommentar

          Lädt...
          X