PHP :: Aufgabe #26

4 Lösungen Lösungen öffentlich

Mit Caesar Chiffre ent- und verschlüsseln

Anfänger - PHP von Dome - 03.01.2013 um 01:30 Uhr
Schreiben Sie ein Programm, indem Sie mit Hilfe der Caesar Chiffre einen beliebigen Text ent- und verschlüsseln können. Zuvor muss der Text und die Anzahl der Verschiebung angegeben werden. Groß- und Kleinschreibung muss nicht beachtet werden.

Konsolenausgabe:

Geben Sie den Text ein: Beispielwort
Um wie viele Stellen soll verschoben werden: 1
Ergebnis: Cfjtqjfmxpsu

Lösungen:

vote_ok
von Jidoka86 (660 Punkte) - 12.05.2016 um 23:36 Uhr
Quellcode ausblenden PHP-Code
<?php
  /**
   *
   */
  class CaesarEncoder
  {

    public function encode($plainText, $offset){
      $encoded = "";
      for ($i=0; $i < strlen($plainText); $i++) {
        $ascii = ord($plainText[$i])+$offset;
        $encoded .= chr($ascii);
      }
      return $encoded;
    }

  }

  $encoder = new CaesarEncoder();

  while(true){
    echo "Geben Sie einen Text ein: ";
    $text = trim(fgets(STDIN));
    if($text == ""){
      echo "Encoder exited\n";
      break;
    }
    echo "Um wie viele Stellen soll verschoben werden: ";
    $offset = trim(fgets(STDIN));

    echo "Ergebnis: {$encoder->encode($text, $offset)}\n";
  }

vote_ok
von syneex (2660 Punkte) - 24.09.2018 um 14:07 Uhr
Quellcode ausblenden HTML-Code
<!DOCTYPE html>
<html>
<head>
	<title>Caesar Chiffre</title>
</head>
<body>
	<form method="POST">
		Geben Sie den Text ein:<br>
		<input type="text" name="phrase"><br>
		Um Wieviele Stellen soll verschoben werden?<br>
		<input type="number" name="verschub"><br><br>
		<input type="submit" name="">	
	</form>
</body>
</html>
Quellcode ausblenden PHP-Code
<?php
if(isset($_POST['phrase']) && isset($_POST['verschub']))
{
	$array = createAsciiArray($_POST['phrase']);
	$erg = convertAsciiarrayToStringarray(changeAsciiRange($array, $_POST['verschub']));
	echo implode("", $erg);
}

function createAsciiArray($string)
{
	$arr = str_split($string);
	return changeAsciiNumber($arr);
}
function changeAsciiNumber($chararray)
{
	$newArray = array();
	for($i = 0; $i < count($chararray); $i++)
	{
		$newArray[$i] = ord($chararray[$i]);
	}
	return $newArray;
}
function changeAsciiRange($numberarray, $changevalue)
{
	for($x = 0; $x < count($numberarray); $x++)
	{
		$numberarray[$x] += $changevalue;
	}
	return $numberarray;
}
function convertAsciiarrayToStringarray($asciiarray)
{
	$lastArray = array();
	for($o = 0; $o < count($asciiarray); $o++)
	{
		$lastArray[$o] = chr($asciiarray[$o]);
	}
	return $lastArray;
}
?>
3 Kommentare
vote_ok
von paddlboot (3730 Punkte) - 08.08.2019 um 10:23 Uhr
Quellcode ausblenden PHP-Code
<?php

//beliebigen Text eingeben
$text = 'Beispielwort';
$verschiebung = 1;
$erg = '';

echo 'Text: '.$text.'<br/>Verschiebung: '.$verschiebung.'<br/>';

$text = strtolower($text);

$buchstaben = 'abcdefghijklmnopqrstuvwxyz';

for($i = 0; $i < strlen($text); $i++)
{
	$stelle = strpos($buchstaben, $text[$i]);

	if($stelle+$verschiebung > 25)
	{
		$pos = ($stelle+$verschiebung) - 26;
	}
	else
	{
		$pos = $stelle+$verschiebung;
	}

	$erg .= $buchstaben[$pos];
}

echo $erg;

?>
vote_ok
von Exception (4890 Punkte) - 24.08.2019 um 15:22 Uhr
Quellcode ausblenden PHP-Code
class Caesar
{
  const ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

  private static function letters2positions(string $text, int $offset)
  {
    $positions = array();
    $text = str_split($text);

    foreach($text as $letter)
    {
      $position = strpos(self::ALPHABET, $letter);

      if(($position + $offset) > (strlen(self::ALPHABET) - 1))
      {
        $positions[] = ($position + $offset) - strlen(self::ALPHABET);
      }
      else 
      {
        $positions[] = $position + $offset;
      }
    }

    return $positions;
  }

  private static function positions2text($positions)
  {
    $letters = '';

    foreach($positions as $position)
    {
      $letters .= self::ALPHABET[$position];
    }

    return $letters;
  }

  public static function encode(string $text, int $offset)
  {
    $positions = self::letters2positions($text, $offset);
    $encoded = self::positions2text($positions);

    return $encoded;
  }

  public static function decode(string $text, int $offset)
  {
    $positions = self::letters2positions($text, -$offset);
    $decoded = self::positions2text($positions);

    return $decoded;
  }
}

Quellcode ausblenden PHP-Code
$text = 'ABCXYZ';
$offset = 2;

$encoded = Caesar::encode($text, $offset);
$decoded = Caesar::decode($encoded, $offset);

var_dump($text);
var_dump($encoded);
var_dump($decoded);

Konsolenausgabe:

string(6) "ABCXYZ"
string(6) "CDEZAB"
string(6) "ABCXYZ"