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.

Controlliamo ciclicamente il funzionamento dei link nei nostri articoli. Se noti dei link che non funzionano segnalacelo tra i commenti. Se hai apprezzato l'articolo considera l'idea di sostenere il blog anche con una piccola donazione. Grazie. Patreon / Ko-fi / Liberapay / Paypal

Lascia un commento

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