Crittografare a 1024 bit

novembre
14

Crittografare a 1024 bit

Inserito In: Develope, Php Scritto da Luca Bottoni

Molte volte vi sarà necessario reperire delle informazioni presenti nelle vostre sessioni o da variabile $_GET che ricevete dai link esterni al vostro sito, ma come fare in modo di ricevere queste stringhe senza farne conoscere il contenuto a un male intenzionato?

Semplice, bisogna crittografare le stringhe che dobbiamo ricevere/inviare in modo che solo chi è in possesso della chiave di decriptazione possa saperne il reale contenuto. In questi casi si utilizza un algoritmo non “one-way”, cioè un algoritmo matematico che ne permette la “mascherazione”, ma anche l’operazione inversa (un esempio di algortimo one-way lo trovarte con la funzione md5 di php). La crittografia è maggiore, tanto maggiore è il valore in bit. Nel nostro esempio useremo RC2 che permette una chiave da 8 a 1024 bit, questo significa che per sfruttare il massimo della sua potenza dovremo creare una chiave di 128 caratteri (ogni carattere sono 8 bit , quindi 128*8=1024)

CODIFICA


//la vostra chiave di decodifica da 128 caratteri, per comodità ne metto una da 8 caratteri (64 bit)
$Key="12345678";
function My_Crypt($String="",$Key="")
{
if($String==""){return false;}
if($Key!="")
{
//Facciamo eseguire a php il calcolo della dimensione iv del RC2 (useremo la modalità  NOFB)
//Per eseguire il processi inverso questo valore ci sarà necessario!!!

$iv_size = mcrypt_get_iv_size(MCRYPT_RC2, MCRYPT_MODE_NOFB);
//Sapendo al dimensione di blocco, creiamo la nostra iv di lavoro

$iv=mcrypt_create_iv($iv_size,MCRYPT_DEV_RANDOM);
//Eseguiamo la crittografia della stringa

$cript = mcrypt_encrypt(MCRYPT_RC2,$Key,$String,MCRYPT_MODE_NOFB, $iv);
if($cript!=false)
{
//Dovendo poter passare questa chiave via $_GET o riceverla, la dovremo trasformare
//in base64, prima però dovremo unirvi la $iv che servirà per la decodifica,
//per farlo uniremo le 2 stringhe con @@ (mettetene uno di vostra scelta) come carattere di unione

return base64_encode($cript."@@".$iv);
}
}else{return false;}
}

Con questa prima funzione abbiamo creato la possibilità di criptare una stringa passata come argomento, il secondo argomento della nostra funzione è la chiave che useremo per blindare la stringa. Quando si cripta si fà uso della “iv”, questo valore se non viene fornito per la decriptazione sarà impossibile eseguirne la decodifica. Per ovviare al problema faremo in modo che tale valore venga fornito dalla stringa stessa.

DECODIFICA

function My_DeCrypt($String="",$Key="")
{
//Decodifichiamo dalla base64
if($String==""){return false;}else{$String=base64_decode($String);}
if($Key==""){return false;}
//ricaviamo Stringa e iv
$Split=explode("@@",$String);
//Stringa crittografata
$StrCrypt=$Split[0];
//Iv
$iv=$Split[1];
//Decriptazione
$Decrypt=mcrypt_decrypt(MCRYPT_RC2,$Key,$StrCrypt,MCRYPT_MODE_NOFB,$iv);
if($Decrypt!=false){return $Decrypt;}else{return false;}
}

Per la decodifica non dovremo far altro che decodificare da base 64 e invocare la funzione di decriptazione (dopo aver ricavato la iv di lavoro) 🙂

Vuoi lasciare un tuo commento?

Attenzione: L'approvazione e l'invio del commento potrebbero avere dei ritardi, quindi, dopo aver premuto il pulante "Invia Commento" attendi.


*