Come criptare e decriptare dati in PHP

La sicurezza informatica è un tema molto acceso e discusso, in continua evoluzione per permettere di sviluppare applicazioni e programmi sempre più sicuri e affidabili. Tutti i dati e le informazioni che circolano attraverso una rete internet devono necessariamente essere protetti in qualche modo, soprattutto se si tratta di dati sensibili come informazioni personali o sui pagamenti online.

Per i molti siti web che ho sviluppato, mi sono sempre posto il problema della sicurezza de dati e di come proteggerli, per non compromettere la sicurezza stessa i siti e gli utenti che ne fanno uso. La prima cosa che viene in mente quando si parla di questo argomento è la criptazione delle informazioni, cioè rendere illeggibili le informazioni attraverso precisi algoritmi di criptazione e l’uso di password/chiavi elaborate.

Con lo sviluppo di siti in PHP ho trovato delle tecniche affidabili di criptazione dei dati e delle informazioni inviate dagli utenti al server, così che restino criptati e privati in ogni momento.

PHP logo

Se stai sviluppando un sito web PHP, in questo articolo ti spiegherò come programmare un sistema di criptazione e decriptazione dei dati attraverso delle specifiche funzioni.

Criptazione e decriptazione dei dati in PHP

Attraverso la programmazione in PHP è possibile creare specifici script per elaborare stringhe di testo, o altri tipi di dati, che permettano poi di restituire valori criptati e illeggibili. La criptazione delle stringhe restituisce un valore testuale alterato attraverso un algoritmo di criptazione con una chiave di sicurezza personalizzata (chiamiamola anche password) e un vettore di inizializzazione (acronimo IV).
Oltre questo è (per ovvie ragioni) necessario sviluppare una funzione contraria di decriptazione dei dati, così da recuperare la stringa testuale originaria ed utilizzarla all’interno dei nostri siti.

Queste funzioni saranno utilissime per svariati motivi, per esempio nei moduli di accesso (login). La criptazione avviene in questo modo:

  • L’utente digita la password per accedere al sito e clicca su ‘invia/accedi’.
  • Il server riceve i dati e li cripta.
  • Il server riscontra i dati con quelli presenti nel database (già criptati) e conferma o rifiuta l’accesso all’utente.

La decriptazione invece è utile nel caso si vogliano recuperare specifici dati, ma senza lasciarli salvati “in chiaro” all’interno del database SQL.

Ad esempio:

  • Un utente fa l’accesso al sito.
  • Il sito mostra le sue informazioni personali nella pagina del profilo utente (presi dal database in forma criptata e poi decriptati per renderli leggibili).

Nota sulle chiavi di criptazione

Per criptare e decriptare le informazioni del server, bisogna fare uso di una chiave di criptazione e un vettore di inizializzazione privati. Per privati intendo che nessun utente dovrà mai venirne a conoscenza, poiché serviranno per decriptare e recuperare tutti i dati protetti.

Mio consiglio: Scrivi le chiavi di sicurezza in un foglio cartaceo e prenditene cura proprio come qualunque altra password personale. Non divulgarle mai online con altri utenti.

Inoltre, proprio come una password, dovrà rispettare alcuni requisiti minimi di sicurezza, come:

  • avere lunghezza minima di 12-15 caratteri.
  • contenere maiuscole e minuscole.
  • contenete numeri e simboli speciali.

Più articolata è, meglio sarà. Usa il nostro tool online per la generazione di password sicure.

In ultimo è bene specificare che, la funzione di criptazione e quella di decriptazione dovranno condividere le medesime chiavi, altrimenti non funzioneranno.

Funzione per criptare in PHP

La funzione di criptazione dei dati sviluppata con PHP è la seguente.

function cripta($stringa){
	$cifratura = "AES-128-CTR";
	$iv_l = openssl_cipher_iv_length($cifratura);
	$IV = '123456'; //PERSONALIZZATA
	$PASSWORD = "mia-password"; //PERSONALIZZATA
	$criptazione = openssl_encrypt($stringa, $cifratura, $PASSWORD, 0, $IV);
	return $criptazione;
}

echo cripta("Hello world!");
     // XQX73zM0VuSlKQM5

Come puoi vedere, in questa funzione utilizzo un algoritmo di cifratura AES, uno dei più comuni utilizzati, con una lunghezza della chiave di cifratura a 128 bit.

Le variabili $IV e $PASSWORD devono essere modificate con stringhe personalizzate.

Funzione per decriptare in PHP

Per recuperare una stringa crittografata attraverso il metodo precedente, dobbiamo procedere in maniera inversa, con una funzione esattamente contraria.

function cripta($stringa){
	$cifratura = "AES-128-CTR";
	$iv_l = openssl_cipher_iv_length($cifratura);
	$IV = '123456'; //PERSONALIZZATA
	$PASSWORD = "mia-password"; //PERSONALIZZATA
	$criptazione = openssl_encrypt($stringa, $cifratura, $PASSWORD, 0, $IV);
	return $criptazione;
}

function decripta($stringa){
	$cifratura = "AES-128-CTR";
	$iv_length = openssl_cipher_iv_length($cifratura);
	$IV = '123456'; //PERSONALIZZATA
	$PASSWORD = "mia-password"; //PERSONALIZZATA
	$decriptazione = openssl_decrypt($stringa, $cifratura, $PASSWORD, 0, $IV);
	return $decriptazione;
}

$stringaCriptata = cripta("Hello world!");
	// Hello world! -> XQX73zM0VuSlKQM5

echo decripta($stringaCriptata);
	// XQX73zM0VuSlKQM5 -> Hello world! 

Iscriviti alla nostra Newsletter qui e seguici su Facebook per aggiornamenti!


Articoli recenti:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

CAPTCHA