[PHP] Cifrare e decifrare i messaggi scritti con la Scacchiera di Polibio o Quadrato di Polibio

Oggi vi voglio parlare della scacchiera di Polibio, nota anche come quadrato di Polibio, è un sistema crittografico inventato dallo storico greco Polibio verso il 150 a.C. . Si basava sul frazionamento dei caratteri del messaggio in chiaro così che potessero essere rappresentati utilizzando un più piccolo insieme di simboli.

Una cosa molto divertente è che la scacchiera di Polibio non nacque come sistema crittografico bensì come sistema per comunicare a distanza: era in pratica una sorta di antico telegrafo. Polibio descrive infatti nelle Storie il suo come un metodo per inviare messaggi mediante l’uso di torce. Un uomo si poneva dietro ad un riparo con 5 torce alla sua destra e 5 torce alla sua sinistra: la comunicazione avveniva mediante il sollevamento di un determinato numero di torce per lato. Il numero era dato proprio dalle coordinate (il numero di riga e quello di colonna) delle lettere del messaggio all’interno della seguente scacchiera (basata sull’alfabeto greco):

Ve ne parlo perché di recente una persona a me molto cara mi ha scritto un messaggio utilizzando appunto questo antico sistema e quindi mi sono messo a realizzare un piccolo script per “cifrare” e “decifrare” velocemente.

Ho fatto delle aggiunte di caratteri ad esempio lo spazio e altri .

<?php

$array = array(
90 => " ", 91 => ".", 92 => ";", 93 => ",", 94 => "!", 95 => "?", 96=> "/n",
11 => "a", 12=> "b", 13 =>"c", 14 => "d", 15 => "e",
21 => "f", 22=> "g", 23 =>"h", 24 => "i", 25 => "j",
31 => "k/q", 32=> "l", 33 =>"m", 34 => "n", 35 => "o",
41 => "p", 42=> "r", 43 =>"s", 44 => "t", 45 => "u",
51 => "v", 52=> "w", 53 =>"x", 54 => "y", 55 => "z"

);

echo "<hr> Cripta <br>";
$str = "prova prova";
$chars = str_split($str);
$str_crypt = null;
foreach($chars as $char){
//echo array_search($char,$array);
$str_crypt .=array_search($char,$array);
}
echo $str_crypt;

echo "<br><hr> Decripta <br>";

$chars = str_split($str_crypt,2);
$str_decrypt = null;
foreach($chars as $char){
if(array_key_exists((int)$char,$array))
$str_decrypt .= $array[(int)$char];
else
$str_decrypt .="--";
}

echo $str_decrypt ;

?>

Qui di seguito vi condivido il messaggio “Cifrato” , ora divertitevi a “Decifrarlo” a mano e poi utilizzate il piccolo script per verificare.

Vedi Testo Cifrato
15131335, 3215 444515 321112124211 2311343435
4435324435 2432 41151313114435 1411323215 332415.
113232354211 3215 332415 321112124211 41354244113435
2432 41151313114435 132315 2311343435 4435324435
2432 41151313114435 1411323215 332415 321112124211 ?
351335324111 14353213153315344415 422433414235511542114411! 42153414243324
2432 332435 41151313114435!
513524 12111324114415 13353315
341524 3224124224.

52.43.

By ImaginSystems & Queen Gin

 

Lascia un commento