PHP egyszerű szövegkódolás

#php

PHP egyszerű szövegkódolás

Figyelem!

Úgy tűnik, hogy jelenleg egy olyan cikket böngészel ami több mint két éve készült. A technológia világában ez nagyon sok idő és azóta már sokkal jobb megoldások is lehetnek, mint amit ebben a cikkben olvashatsz. Így azt tanácsolom keress egy frissebb cikket ebben a témában.

Vannak olyan esetek, amikor egy programozási nyelv tanulásakor érdekes és szórakoztató megközelítésre van szükség. Ezért ebben a bejegyzésemben egy szövegkódoló kis programocskát fogunk készíteni, aminek segítségével szövegeket rejthetünk el mások elől.

Titkos ügynökként gyakran megesik, hogy a kommunikációnkat el akarjuk rejteni mások elől és ezért kódoljuk azt. Csak az tudja megfejteni a kódunkat aki rendelkezik a megfelelő kulccsal és kódszóval. A kódszó betűit egy-egy számra fogunk kicserélni szövegünkben a kulcs pedig még egyszer bebonyolítja a megfejtést. De lássuk ezt a gyakorlatban.

Először csak teszteljük működik-e az elképzelésünk kulcs nélkül.

<?php

$kodszo = 'erdghkaczs';
$uzenet = 'Sikerült és működik a kódolás?';
$kulcs = '';

$array1 = array('e','r', 'd', 'g', 'h', 'k', 'a', 'c', 'z', 's');
$array2 = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);

$kodoltUzenet = str_replace($array1, $array2, $uzenet);

echo 'Eredeti üzenet: ' . $uzenet . '<br /><br />';
echo 'Kódolt üzenet: ' . strtoupper($kodoltUzenet);

?>

Ha ez már rendben van, akkor adjunk hozzá egy formot. Így be tudjuk küldeni a kódolni kívánt szöveget.

<form action="" method="POST">
A kódolni kívánt üzenet:&lt;br />
<textarea name="uzenet" rows="4" cols="60"></textarea>&lt;br />
<input type="submit" value="Kódolás" />
</form>
<br />

<?php

$kodszo = 'erdghkaczs';
$kulcs = '';

$array1 = array('e','r', 'd', 'g', 'h', 'k', 'a', 'c', 'z', 's');
$array2 = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);

if($_POST) {
    $uzenet = strip_tags($_POST['uzenet']);
    $kodoltUzenet = str_replace($array1, $array2, $uzenet);
    echo 'Kódolt üzenet:&lt;br />';
    echo nl2br(strtoupper($kodoltUzenet));
}

?>

Ez szép és jó eddig, de nehezítsünk a megfejtésen, hogy ne legyen elég a kódszó kitalálása a feltöréshez.

A kulcs a 0-át fogja mozgatni egy bizonyos értékkel, így jobban elrejthetjük melyik szám melyik betűt takarja.

<?php

$kodszo = 'ERDGHKACZS';
$kodHossz = strlen($kodszo);
$kodszoArray = array();
$kodArray = array(0,1,2,3,4,5,6,7,8,9);

// betűkkel teli tömböt csinálunk a kódszóból
for ($i = 0; $i < $kodHossz; $i++) {
    $kodszoArray[$i] = $kodszo[$i];
}

if($_POST) {

    $kulcs = strip_tags($_POST['kulcs']);

    // tömb számolása a kulcs segítségével
    $pozicio = $kulcs[0];
    $szamFordulas = 10 - $pozicio;

    for($i = 0; $i < $szamFordulas; $i++) {
        array_push($kodArray, array_shift($kodArray));
    }

    // a következővel vissza tudjuk ellenőrizni magunkat
    $szamol = 0;
    foreach($kodArray as $kulcs => $szo) {
        $r[$szamol] = $kodszo[$kulcs] . ' => ' . $szo;
        $szamol++;
    }
    echo implode(', ', $r) . '<br />';

    // lássuk az üzenetet
    $uzenet = strip_tags($_POST['uzenet']);

    // kódoljuk 
    $kodoltUzenet = str_replace($kodszoArray, $kodArray, strtoupper($uzenet));

    // dekódoljuk
    $kodolatlanUzenet = str_replace($kodArray, $kodszoArray, $kodoltUzenet);
    echo 'Kódolt üzenet:<br />';
    echo nl2br(strtoupper($kodoltUzenet));
    echo '<br />';
    echo 'Kódolatlan üzenet:<br />';
    echo nl2br(strtoupper($kodolatlanUzenet));
}

?>

A kódszót nagybetűvel adtam meg és minden bemenetet nagybetűssé formáztunk, hogy ne okozzon ez problémát a kicserélésnél. Persze nem foglalkoztunk az ékezetes betűk problémájával, de az egy újabb fejezet lenne.

Az így készült kódot még sokban lehetne bonyolítani. Saját kódoló és dekódoló oldalt lehetne létrehozni, ahol a felhasználók a kódszavakat és a kulcsokat is meg tudják adni stb..

De persze nem az volt a célunk, hogy nagyon profi kódolót csináljunk, hanem az, hogy megismerjünk pár szöveges műveletet. Remélem sikerült kedvet csinálnom a programozáshoz ezzel a cikkemmel.

További tartalmak