back to top

Gestire la crittografia con PHP

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.

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.

Pubblicitร 
Claudio Garau
Claudio Garau
Web developer, programmatore, Database Administrator, Linux Admin, docente e copywriter specializzato in contenuti sulle tecnologie orientate a Web, mobile, Cybersecurity e Digital Marketing per sviluppatori, PA e imprese.