Php offre agli sviluppatori una serie di funzioni relative alla crittatura, legate alla libreria mcrypt; tale libreria supporta moltissimi algoritmi di crittazione, alcuni più utilizzati ed altri meno. Gli algoritmi sono:
- DES
- TripleDES
- Blowfish
- 3-WAY
- SAFER-SK64
- SAFER-Sk128
- TWOFISH
- TEA
- RC2
- GOST
- RC6
- IDEA
Per funzionare con tale libreria, il PHP deve essere stato compilato con l'opzione --with-mcrypt
. I comandi fondamentali sono quattro, tutti con la medesima sintassi:
- mcrypt_cfb(): cipher feedback; codifica byte per byte;
- mcrypt_cbc(): cipher block chaining: utile per l'encoding dei file con un grande margine di sicurezza;
- mcrypt_ecb(): electronic codebook: utilizzata per dati random, dove il livello di sicurezza non è altissimo;
- mcrypt_ofb(): output feedback: simile a cfb, ma è data maggiore attenzione agli errori.
La sintassi in generale è:
$encrypted = mcrypt_XXX(algoritmo, chiave, input, encode/decode)
dove:
- XXX è il metodo che si intende utilizzare (cfb, cbc, cfb o ofb);
- algoritmo è l'algoritmo che si intende utilizzare, con la sintassi:
MCRYPT_ALGORITMO
Ad esempio, si potrebbe utilizzare
MCRYPT_BLOWFISH
oppure
MCRYPT IDEA
- chiave altro non è che la chiave con cui si andranno a crittare i dati;
- input sono i dati da crittare;
- encode/decode indica alla funzione se si devono crittare o decrittare i dati; per questo, si usano rispettivamente:
MCRYPT_ENCRYPT
e
MCRYPT_DECRYPT
Vediamo ora un esempio: volendo crittare una semplice stringa di testo con chiave di crittatura "La mia chiave" utilizzando CFB con l'algoritmo IDEA, dovremo scrivere:
$stringa = "Una semplice stringa di testo";
$chiave = "La mia chiave";
$encrypted = mcrypt_cfb(MCRYPT_IDEA, $chiave, $stringa, MCRYPT_ENCRYPT);
Chiunque voglia poi leggere i nostri dati crittati ($encrypted) dovrà ovviamente conoscere la chiave, il metodo e l'algoritmo utilizzati; quindi potrebbe scrivere qualcosa del tipo:
$chiave = "La mia chiave";
$stringa = mcrypt_cfb(MCRYPT_IDEA, $chiave, $encrypted, MCRYPT_DECRYPT);
La sua variabile "$stringa", quindi, conterrà "Una semplice stringa di testo".