Hey zusammen,
ich habe in der letzten Stunde in PHP die Cäser-Verschlüsselung durch Transposition entwickelt. Ich nutze zum Teil redunanten Code und habe auch ein paar notwendige Verzweigungen drin. Ich finde, dass man diesen Code noch deutlich komprimieren kann nur komme zur Zeit nicht drauf wie.
Nun möchte ich einfach mal euer Feedback zu diesem Anwendungscode hören. Was findet ihr gut? Was findet ihr nicht gut? Was kann ich besser machen? Wie kann ich den Code komprimieren?
PHP
<?php
session_start();
/*
Caeser Verschlüsselung (Ersetzungschiffre)
Jeder Buchstabe wird durch einen anderen Buchstaben ersetzt
Was brauchen wir dafür?
1. Schlüsselraum das Alphabets: 26
2. Key, um wie viel Stellen die Buchstaben verschoben werden sollen (k)
3. Position des jeweiligen Buchstabens im Alphabet (p)
Verschlüsseln = p + k mod 26
Entschlüsseln = p - k mod 26
*/
$alphabet = [
"a" => 1,
"b" => 2,
"c" => 3,
"d" => 4,
"e" => 5,
"f" => 6,
"g" => 7,
"h" => 8,
"i" => 9,
"j" => 10,
"k" => 11,
"l" => 12,
"m" => 13,
"n" => 14,
"o" => 15,
"p" => 16,
"q" => 17,
"r" => 18,
"s" => 19,
"t" => 20,
"u" => 21,
"v" => 22,
"w" => 23,
"x" => 24,
"y" => 25,
"z" => 26
];
$keyRoom = count($alphabet);
$key = 3;
$decryptedText = null;
$cipherText = null;
if(isset($_POST["verschluesseln"])){
$plainText = $_POST["plainText"] ?? null;
if($plainText){
$plainTextArray = str_split(strtolower($plainText));
$output = "<strong>Der verschlüsselte Text lautet:</strong> ";
foreach ($plainTextArray as $letter) {
$letterTyp = null;
$i = 0;
if(array_key_exists($letter, $alphabet)){
$newPosition = ($alphabet[$letter] + $key) % $keyRoom;
if($newPosition === 0){
$newPosition = 26;
}
}else{
$newPosition = 0;
$letterTyp = $letter;
}
foreach ($alphabet as $cipherKey => $value) {
if($value === $newPosition){
$cipherText .= $cipherKey;
}else{
if($i < 1){
$cipherText .= $letterTyp;
$i++;
}
}
}
}
$output .= $cipherText;
$_SESSION["cipherText"] = $cipherText;
}
}else if(isset($_POST["entschluesseln"]) && isset($_SESSION["cipherText"])){
$cipherTextArray = str_split($_SESSION["cipherText"]);
$output = "<strong>Der entschlüsselte Text lautet:</strong> ";
foreach ($cipherTextArray as $letter) {
$letterTyp = null;
$i = 0;
if(array_key_exists($letter, $alphabet)){
if(($alphabet[$letter] - $key) < 0){
$result = $alphabet[$letter] - $key;
$result += $keyRoom;
$oldPosition = $result % $keyRoom;
}else{
$oldPosition = (abs($alphabet[$letter] - $key)) % $keyRoom;
}
}else{
$oldPosition = 0;
$letterTyp = $letter;
}
foreach ($alphabet as $plainKey => $value) {
if($value === $oldPosition){
$decryptedText .= $plainKey;
}else{
if($i < 1){
$decryptedText .= $letterTyp;
$i++;
}
}
}
}
$output .= $decryptedText;
}
?>
<!DOCTYPE html>
<html lang="de" dir="ltr">
<head>
<meta charset="utf-8">
<title>Cäser Verschlüsselung</title>
<style>
form{
margin-bottom: 1em;
}
textarea{
display: block;
}
</style>
</head>
<body>
<h1>Cäser Verschlüsselung</h1>
<form class="" method="post">
<label for="plainText">Gebe hier deinen Klartext ein:</label>
<textarea name="plainText" id="plainText" rows="10" cols="35"></textarea>
<input type="submit" name="verschluesseln" value="Klartext verschlüsseln">
<input type="submit" name="entschluesseln" value="Generieter Ciphertext entschlüsseln">
</form>
<?= $output ?? null; ?>
</body>
</html>
Alles anzeigen
Ich würde mich sehr über euer Feedback freuen.
Schöne Grüße,
Stef