Questa è una vecchia versione del documento!
Criptare dati di un database MySQL
MySQL dà la possibilità di criptare i dati inseriti in un campo MySQL tramite le funzioni AES_ENCRYPT() e AES_DECRYPT(). Vediamo più nel dettaglio cosa fanno queste funzioni:
- AES_ENCRYPT() cripta una string a e restituisce una stringa binaria
- AES_DECRYPT() decripta la stringa binaria criptata e restituisce la stringa originale
Gli argomenti in input possono essere di qualunque lunghezza. Se un argomento è NULL, il risultato della funzione è NULL.
La lunghezza della stringa criptata può essere calcolata con la formula
$$16 \cdot \left( trunc \left( string\_length / 16 \right) + 1 \right)$$
Un esempio
Supponiamo di voler creare una tabella in cui dobbiamo registrare i campi criptati name e address. Senza crittografia i due campi sarebbero il primo del tipo VARCHAR(50) ed il secondo del tipo VARCHAR(100).
Useremo come chiave la stringa 'IL_key'.
Creiamo la tabella con il comando
CREATE TABLE IF NOT EXISTS `user` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` varbinary(100) DEFAULT NULL, `address` VARBINARY(200) NOT NULL , PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=1 ;
Passiamo ora ad inserire i dati, mediante la funzione
INSERT into user (name, address) VALUES (AES_ENCRYPT('Michele', 'IL_key'),AES_ENCRYPT('via dei Gladioli', 'IL_key'));
Per leggere i campi usiamo invece il comando
SELECT AES_DECRYPT(name, 'IL_key'), AES_DECRYPT(address, 'IL_key') from user;