Codificare e decodificare una stringa in PHP

Come rendere illegibile il contenuto del nostro database a terzi sconosciuti

La privacy degli utenti deve essere sempre messa al primo posto quando si sviluppa un nuovo applicativo, web o client che sia. In questo caso ci occuperemo di cryptare e decryptare i valori che possono essere, per esempio, memorizzati in un database.

Se volessimo proteggere i dati degli utenti che si iscrivono su un nostro sito, infatti, non dovremmo limitarci solo a garantirne la non diffusione, dovremmo infatti preoccuparci anche di andare a crittare i valori prima del salvataggio, in modo tale che in caso di furto del database i ladri non dovrebbero avere la possibilità di leggere dati sensibili, appartenenti agli utenti, in chiaro.

A tal proposito ho trovato online questo codice che, utilizzando la funzione openssl_decrypt e base64_encode, insieme alla configurazione di due chiavi distinte secret_key e secret_iv, si occupa di andare a crittare e decrittare tutte le stringhe sia in fase di scrittura nel db, sia in fase di lettura.

/**
 * Encrypt and decrypt
 * 
 * @author Nazmul Ahsan <n.mukto@gmail.com>
 * @link http://nazmulahsan.me/simple-two-way-function-encrypt-decrypt-string/
 *
 * @param string $string string to be encrypted/decrypted
 * @param string $action what to do with this? e for encrypt, d for decrypt
 */
function my_simple_crypt( $string, $action = 'e' ) {
    // you may change these values to your own
    $secret_key = 'my_simple_secret_key';
    $secret_iv = 'my_simple_secret_iv';

    $output = false;
    $encrypt_method = "AES-256-CBC";
    $key = hash( 'sha256', $secret_key );
    $iv = substr( hash( 'sha256', $secret_iv ), 0, 16 );

    if( $action == 'e' ) {
        $output = base64_encode( openssl_encrypt( $string, $encrypt_method, $key, 0, $iv ) );
    }
    else if( $action == 'd' ){
        $output = openssl_decrypt( base64_decode( $string ), $encrypt_method, $key, 0, $iv );
    }

    return $output;
}

Dopo aver incollato la funzione e impostato le due chiavi, potremo utilizzarla con il parametro e, in caso di crittatura

$encrypted = my_simple_crypt( 'Hello World!', 'e' );

dopodiché, in caso di lettura dal database, utilizzeremo il parametro d per decrittare la stringa

$decrypted = my_simple_crypt( 'RTlOMytOZStXdjdHbDZtamNDWFpGdz09', 'd' );

Si tratta di una soluzione pratica ed efficiente. Dobbiamo ricordarci però di essere generosi nella dimensione dei campi del database destinati alle stringe codificate, in quanto la lunghezza dei parametri sarà superiore ai valori decrittati.

Se ci tieni alla privacy dei tuoi utenti, crittografali oltre a non distribuirli.

Offrimi un caffè su ko-fi.com
Controlliamo randomicamente il funzionamento dei link nei nostri articoli. Nel frattempo, se dei link risultano corrotti segnalacelo tra i commenti, li correggeremo. Grazie.

Francesco

Fondatore e amministratore di Dummy-X dal 2007, condivido interessi, idee, progetti, e soluzioni informatiche. Non vendo prodotti, mi limito a descrivere tecnologie e a mettere a disposizione gli strumenti adatti per poter realizzare idee. Tutto ciò che scrivo è frutto della mia esperienza lavorativa e della mia voglia di imparare. Da sempre studio l'informatica in tutte le sue angolazioni (software, hardware, reti e sicurezza) e negli ultimi anni mi sono specializzato nello sviluppo di web applications. Sono sempre aperto a nuove sfide e alla ricerca e conoscenza delle nuove tecnologie.
 

Lascia un commento

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