Nell’era digitale, dove la trasmissione di informazioni (anche sensibili) tra dispositivi elettronici rappresenta la quotidianitร , la protezione dei dati รจ diventata una prioritร fondamentale. Termini come crittografia e cifratura sono ormai parte integrante del nostro vocabolario, soprattutto quando si parla di sicurezza informatica.
Internet, per sua natura, รจ un canale di comunicazione potenzialmente insicuro, rendendo essenziale l’uso di tecniche che garantiscano la riservatezza delle informazioni. Proprio per far fronte a questa esigenza si utilizzano tecniche crittografiche come quelle che vi illustrerรฒ in questo articolo.
Indice
Crittografia, cifratura e decifratura
Ma cosa significano realmente questi termini? La crittografia รจ la scienza che studia i metodi per convertire testi leggibili (in chiaro) in stringhe alfanumeriche incomprensibili senza una “chiave”, chiamate crittogrammi.
La cifratura รจ il processo attraverso il quale si genera un crittogramma da un testo in chiaro, mentre il processo inverso, ovvero la riconversione del crittogramma al testo originale, รจ noto come decifrazione o decifratura.
La sicurezza della cifratura e della decifrazione dipende dall’uso di chiavi, che possono essere pubbliche o private. Una chiave pubblica รจ accessibile a tutti, mentre una chiave privata รจ riservata solo al suo possessore. Ad esempio, รจ possibile cifrare un messaggio con una chiave pubblica, ma solo chi possiede la corrispondente chiave privata puรฒ decifrarlo.
Funzioni di crittografia in PHP
PHP offre diverse funzioni per la crittografia dei dati, tra cui crypt(), md5(), sha1() e le loro varianti per file, come md5_file() e sha1_file(). Queste funzioni implementano algoritmi hash one-way, che generano un riassunto crittografico del testo in chiaro, difficile da invertire.
In matematica, una funzione รจ considerata “difficilmente invertibile” quando, dato un valore, รจ improbabile risalire al testo originale che ha generato quel valore. Ad esempio, utilizzando la funzione sha1() per crittografare la stringa “php”, si ottiene un hash complesso che non puรฒ essere facilmente decodificato per recuperare il testo “php”.
La funzione crypt() in PHP
La funzione crypt() di PHP รจ utilizzata per generare un hash di una stringa in modo unidirezionale. Derivata dal costrutto omonimo in UNIX per l’archiviazione delle password, crypt() non รจ una funzione hash one-way vera e propria, ma supporta diversi algoritmi, tra cui il DES (Data Encryption Standard).
La sintassi di crypt() รจ la seguente:
string crypt ( string $str [, string $salt ] )
Qui, $str
รจ la stringa da crittografare, mentre $salt
รจ un parametro opzionale che rende la crittografia piรน sicura, specialmente se la stringa originale รจ una parola comune. Se $salt
non viene specificato, PHP ne genererร uno automaticamente.
Un esempio di utilizzo รจ il seguente:
<?php
$str = "mrwebmaster";
$crypt = crypt($str);
echo 'Prima: ' . $str. "<br />";
echo 'Dopo: ' . $crypt;
?>
L’output generato sarร simile a questo:
Prima: mrwebmaster
Dopo: $1$oF5.Rq/.$76Mv9uIGAPdYgvxDVu2JJ1
La stringa crittografata cambia ad ogni esecuzione, rendendo ancora piรน sicura la funzione.
Crittografia con md5() e sha1()
Le funzioni md5() e sha1() calcolano rispettivamente l’hash MD5 e SHA-1 di una stringa. MD5 genera un hash a 128-bit (32 caratteri esadecimali), mentre SHA-1 produce un hash a 160-bit (40 caratteri esadecimali).
Esempio di utilizzo di md5():
<?php
$str = "mrwebmaster";
$md5 = md5($str);
echo $md5;
?>
Output:
2ae95316f024af4168476184d91710f8
Esempio di utilizzo di sha1():
<?php
$str = "mrwebmaster";
$sha1 = sha1($str);
echo $sha1;
?>
Output:
660d39ec9f2e6e64530e7717c4ed51878a31c9f5
Crittografia con md5_file() e sha1_file()
Le funzioni md5_file() e sha1_file() eseguono le stesse operazioni di md5() e sha1(), ma su interi file anzichรฉ su semplici stringhe. Questo รจ utile per verificare l’integritร dei file o tracciare modifiche apportate a script PHP.
Esempio:
<?php
$file = "info.php";
$md5 = md5_file($file);
$sha1 = sha1_file($file);
echo $md5 . "<br />";
echo $sha1;
?>
Standard di criptazione supportati da PHP
PHP supporta vari standard di crittografia, tra cui:
- DES: Un algoritmo di crittografia ormai considerato poco sicuro.
- Extended DES: Un’evoluzione di DES per migliorarne la sicurezza.
- MD5: Una funzione hash che genera un hash a 128-bit.
- Blowfish: Un algoritmo di crittografia con chiavi variabili tra 32 e 448 bit.
Un esempio di script che utilizza tutti questi standard:
<?php
if (CRYPT_STD_DES == 1) {
echo 'St. DES: ' . crypt('mrwebmaster') . '<br />';
} else {
echo 'Non supportato.<br />';
}
if (CRYPT_EXT_DES == 1) {
echo 'Ext. DES: ' . crypt('mrwebmaster') . '<br />';
} else {
echo 'Non supportato.<br />';
}
if (CRYPT_MD5 == 1) {
echo 'MD5: ' . crypt('mrwebmaster') . '<br />';
} else {
echo 'Non supportato.<br />';
}
if (CRYPT_BLOWFISH == 1) {
echo 'Blowfish: ' . crypt('mrwebmaster') . '<br />';
} else {
echo 'Non supportato.<br />';
}
?>
L’output varierร in base agli algoritmi supportati dal sistema.