kostenloser Webspace werbefrei: lima-city


Verschlüsselungsprogramms nach Vigenère mit PHP

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    d******3

    Ich muss ein Verschlüsselungsprogramm nach Vigenère mit PHP schreiben, soweit bin ich schon gekommen:
    <html>
    	<head>
    		<title>Verschlüsselungsprogramms nach Vigenère mit PHP</title>
    	</head>
    	<body>
    	<form method="post">
    	<input name="eingabe">
    	<br>
    	<input type="submit" value="Verschlüsseln">
    	</form>
    	<?php
    	//Wir übergeben der Variable $eingabe die Informationen des Feldes "eingabe".
    	$eingabe = $_POST["eingabe"];
    
    	//Wir überprüfen ob eine Eingabe vorhanden ist.
    	if ($eingabe != "") {
    		//Wir deklarieren unser Alphabet-Array.
    		$alphabet = array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z");
    
    		//Wir geben der Variable $key die Position der Eingabe im Alphabet-Array.
    		$key = array_search($eingabe, $alphabet);
    
    		//Wir übergeben der Variable $ausgabe den Wert der Position $key + 3 des Alphabet-Arrays.
    		$ausgabe = $alphabet[$key + 3];
    
    		//Wir schreiben das Ergbenis.
    		echo "$eingabe ergibt $ausgabe.";
    	}
    	?>
    	</body>
    </html>

    Allerdings habe ich jetzt 2 Probleme:
    1. Es funktioniert nicht wenn man mehr als 1 Buchstabe eingibt.
    2. Es gibt ab dem Buchstabe "x" aufsteigend nichts aus.

    Ich würde mich sehr darüber freuen, wenn mir jemand behilflich sein könnte.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. zu 1.
    Um mehr als einen Buchstaben zu nehmen, musst die die Länge des eingegebenen Strings herausfinden und mit einer Schleife jeden Buchstaben einzeln verschlüsseln.

    zu 2.
    Du rechnest einfach +3, was aber bei x, y und z über die Länge deines definiertes Arrays herausgeht, deswegen kannst du das so nicht verschlüsseln. Du musst prüfen, ob die Länge deines Arrays noch nicht überschritten ist, und falls doch, wieder von vorne beginnen. So ergibt x dann a, y wird zu b und zu zu c.
  4. Autor dieses Themas

    d******3

    Könntest du mir zu der Schleife ein Beispiel geben?
  5. Ich weiß, vielleicht ist es nicht so sinnvoll dir es einfach zu zeigen, aber eine Lösung könnte so aussehen:
    <html>
    	<head>
    		<title>Verschlüsselungsprogramms nach Vigenère mit PHP</title>
    	</head>
    	<body>
    	<form method="post">
    	<input name="eingabe">
    	<br>
    	<input type="submit" value="Verschlüsseln">
    	</form>
    	<?php
    	//Wir übergeben der Variable $eingabe die Informationen des Feldes "eingabe".
    	$eingabe = $_POST["eingabe"];
    
    	//Wir überprüfen ob eine Eingabe vorhanden ist.
    	if ($eingabe != "") {
               // länge der eingabe
    	 $lenght=strlen($eingabe);
    
              // ausgabe auf leer setzen
    	 $ausgabe='';
    
              // schleife starten
    	 for($i=0;$i<$lenght;$i++)
    	 {
    		//Wir deklarieren unser Alphabet-Array.
    		$alphabet = array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z");
    
    		//Wir geben der Variable $key die Position der Eingabe im Alphabet-Array.
    		@$key = array_search($eingabe[$i], $alphabet);
    
                         // die "verschlüsselte" zahl gleich festlegen
    		$key = $key + 3;
    
                         // überprüfen ob die neue zahl größer ist als die anzahl der elemente im array
    		if($key>=sizeof($alphabet))
    		{
                          // wenn ja, von neuen wert die anzahl der arrayelemente abziehen um "vor vorne" zu starten
    		 $key = $key - sizeof($alphabet);
    		}
    
    		//Wir übergeben der Variable $ausgabe den Wert der Position $key + 3 des Alphabet-Arrays und hängen es an eine mögliche alte $ausgabe dran
    		$ausgabe.=$alphabet[$key];
    	  }
    
    	    //Wir schreiben das Ergbenis.
    	    echo "$eingabe ergibt $ausgabe.";
    
    	}
    	?>
    	</body>
    </html>

    $alphabet könnte man auch noch außerhalb der Schleife definieren, das sparten Rechenleistung. Außerdem kannst du $alphabet beliebig erweitern zB mit Sonderzeichen, ohne den anderen Code nochmal ändern zu müssen, da alles sehr variabel gehalten ist. Was man noch machen könnte ist den Offset, also hier 3, von User selbst festlegen zu lassen und den entsprechend zu verwenden.

    Beitrag zuletzt geändert: 6.2.2009 15:01:20 von tct
  6. Autor dieses Themas

    d******3

    Erstmal vielen Dank für deine Antwort. Ich schau mir das mal an und versuche das Ganze dann zu verstehen, schließlich arbeite ich ja daran um es zu verstehen. (Das ist keine Hausaufgabe oder so, nur eine Aufgabe die ich im Internet gefunden habe um mich mit Arrays zu beschäftigen. :eek:)

    Da habe ich auch schon eine erste Frage...
    Wofür ist das @ vor $key?

    Beitrag zuletzt geändert: 6.2.2009 15:06:26 von dustin93
  7. Das @ unterdrückt nur die Warnung, die sonst ausgegeben wird.
    Meine Methode ist nämlich nicht ganz sauber. Wie du siehst verwende ich $eingabe[$i], was aber eigentlich nur für Arrays gedacht ist. $eingabe ist aber ein String, jedoch kann man mit dieser Kurzschreibweise so auch auf einzelne Buchstaben innerhalb eines Strings zugreifen. Jedoch denkt PHP es sei handelt sich um ein Array und gibt eine Warnung aus, da zB das Element $eingabe[1] ja so nicht vorhanden ist. Aber es funktioniert :wink:
  8. t*****b

    Wenn du dich gerade mit Arrays auseinander setzt, würde ich dir empfehlen, dich auch mit Schleifen auseinander zu setzen, da man diese Häufig in Verbindung mit Schleifen benötigt.
  9. Autor dieses Themas

    d******3

    Eine Frage bleibt noch offen, warum der Punkt nach der $ausgabe Variable?
  10. Noch eine Kurzschreibweise, diesmal aber eine "legale".
    $ausgabe.= $alphabet[$key] bedeutet so viel $ausgabe=$ausgabe.$alphabet[$key] oder übersetzt: Hänge $alphabet[$key] an die bestehende Variable $ausgabe dran. Beides ist erlaubt, das erste ist halt kürzer.
    Allegemein werden Variablen in PHP mit einem Punkt verküpft.
  11. Autor dieses Themas

    d******3

    Okay, vielen Dank! :)
    Ich werde mich damit in Zukunft noch ein wenig weiter beschäftigen...
  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!