diff --git a/modul5/index5_5.php b/modul5/index5_5.php index 651defe..1331d92 100644 --- a/modul5/index5_5.php +++ b/modul5/index5_5.php @@ -12,43 +12,80 @@

Kryptering

\n"; - $tegn = mb_ord($tegn); - + if(isset($tegnTegn[$tegn])){ + // gå x-antall trinn opp i matrisen. Start på begynnelsen hvis den går over enden av matrisen. + $tegnNkl = $tegnTegn[$tegn]+10; + if($tegnNkl >= count($tegnMatrise)){ + $tegnNkl -= count($tegnMatrise); + } + // Oppdater matrisen med det nye tegnet. + $tegn = $tegnMatrise[$tegnNkl]; + } } unset($tegn); - return implode($karakterer); + // Sette inn tilfeldige tegn fra $randoms, annenhvert tegn + $output = ""; + foreach ($karakterer as $kar){ + $output .= $kar.$randoms[ rand(0,strlen($randoms)-1) ]; + } + + return $output; } function dekrypter($input): string { - // Array med alle tegn i den insatte strengen. + global $tegnMatrise, $tegnTegn; + + // Matrise med alle karakterene til den gitte strengen. $karakterer = preg_split('//u', $input, null, PREG_SPLIT_NO_EMPTY); + // Fjern hvert andre tegn, da de er 'fillers'. (De bare fyller opp så stringen blir lengre) + foreach ($karakterer as $k => $v){ + if($k % 2 !== 0){ + unset($karakterer[$k]); + } + } + + // Flytt karakterene tilbake til dems opprinnelige posisjon $karakterer = arrayMove($karakterer, 1/3); - return $input; + // Justere tegnene tilbake med x-antall tegn. Se krypter() for flere kommentarer. + foreach ($karakterer as &$tegn){ + if(isset($tegnTegn[$tegn])){ + $tegnNkl = $tegnTegn[$tegn]-10; + if($tegnNkl < 0){ + $tegnNkl += count($tegnMatrise); + } + + $tegn = $tegnMatrise[$tegnNkl]; + } + } + + // Slå sammen $karakterer til en string igjen. Dette er stringen dekryptert. + return implode($karakterer); } - // Rotere nøklene på en array med en satt forskyvning. + + // Funksjon for å rotere nøklene på en array med en satt forskyvning. function arrayMove($array, $forskyvning = 2/3): array { $len = count($array); $start = round($len*$forskyvning); @@ -63,13 +100,29 @@ } } + // Ksort sorterer så nøklene setter seg på sin nå riktige plass. ksort($ut); return $ut; } - echo "

Ukryptert:

"; - echo "

Kryptert:

"; + // Inputs. Hvis det er et utkryptert input, krypter det og motsatt. Gitt en standardfrase hvis ingen av POST-parametrene er mottatt. + if(isset($_POST['krypter'])){ + $ukryptert = $_POST['krypter']; + $kryptert = krypter($ukryptert); + } + elseif(isset($_POST['dekrypter'])){ + $kryptert = $_POST['dekrypter']; + $ukryptert = dekrypter($kryptert); + } + else { + $ukryptert = 'En konduktør sliter når hanen galer.'; + $kryptert = krypter($ukryptert); + } + + + echo "


"; + echo "


"; ?>