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:<br />
<textarea name="uzenet" rows="4" cols="60"></textarea><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:<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.