In base a MySQL
, crittografia AES ( Advanced Encryption Standard
) è il metodo migliore disponibile per fornire crittografia e decrittografia reversibili in SQL .
Precedentemente noto come Rijndael, le funzioni AES_ENCRYPT
e AES_DECRYPT
ora sono incorporate in MySQL
in modo che tu possa prendere i dati dell'utente, crittografarlo con un sale, archiviarlo nel tuo database, quindi estrarlo di nuovo in seguito e decrittalo.
Definisci il tuo sale
Devi applicare un salt ai dati che crittografati. Questo è un codice speciale che utilizza l'algoritmo di crittografia che funziona un po 'come una chiave.
Dovrai fornire la stessa identica chiave per decifrare i dati e se un utente malintenzionato dovrebbe accedere al tuo database, non sarà in grado di decifrarlo senza conoscere il sale.
Se definisci il tuo sale in PHP come questo, sarai in grado di inserire la costante nelle tue istruzioni SQL più facilmente.
if(!define('SALT')) define('SALT','897sdn9j98u98jk');
Per inserire dati nel tuo database MySQL e crittografare le informazioni sensibili, dovrai inviare un comando come questo, insieme al tuo salt.
INSERT INTO your_table (username,email,shoe size) VALUES ('$username', AES_ENCRYPT('$email','".SALT."'), AES_ENCRYPT('$shoesize','".SALT."'));
Questo inserirà il nome utente in testo semplice, in quanto non è sensibile, ma crittografa l'email dell'utente e il messaggio di posta elettronica, per impedire che vengano visualizzati senza accesso a Salt.
A un certo punto, avrai bisogno di accedere ad alcuni dei dati che hai archiviato nel suo formato crittografato, e puoi farlo molto facilmente usando la funzione AES_DECRYPT di MySQL e lo stesso sale che hai usato quando hai crittografato i dati e inserito.
SELECT username, AES_DECRYPT('email','".SALT."') AS email,
AES_DECRYPT('shoesize','".SALT."') AS shoesize FROM your_table WHERE username ='fred';
Se SELEZIONA i dati crittografati senza eseguirli tramite AES_DECRYPT o con il sale sbagliato o senza sale, otterrai una stringa brutta e illeggibile di caratteri dispari. Ciò significa che se un utente malintenzionato riesce ad accedere al tuo database, ma non ha accesso al tuo server per visualizzare il sale, non sarà in grado di leggere nessuno dei dati che hai memorizzato. Almeno, non senza grandi sforzi per provare e decifrare i dati.
L'aggiornamento dei record crittografati è molto simile all'inserimento. Fondamentalmente, basta applicare lo stesso sale e riemettere il comando AES_ENCRYPT per ricodificare nuovamente i dati e bloccarli in modo sicuro.
UPDATE your_table SET email = AES_ENCRYPT('$email','".SALT."'), shoesize = AES_ENCRYPT('$shoesize','".SALT."') WHERE username= 'fred';
Ricerca di dati crittografati utilizzando sia AES_ENCRYPT che AES_DECRYPT
Le cose diventano un po 'più complicate quando devi cercare i dati che sono criptati e quindi visualizzarli nel suo formato non criptato.
Supponiamo che tu voglia cercare un utente usando il loro indirizzo email, ma lo avresti crittografato nel database. Innanzitutto, è necessario crittografare l'indirizzo e-mail che si desidera cercare con AES_ENCRYPT e il proprio sale, e quindi è necessario utilizzare AES_DECRYPT per assicurarsi che MySQL lo decifri, restituendolo in un formato leggibile.
Puoi ottenere questo, usando un codice un po 'come questo:
SELECT user_username,
AES_DECRYPT(email,'".SALT."') AS email,
AES_DECRYPT(shoesize,'".SALT."') AS shoesize
FROM your_table WHERE
(email = AES_ENCRYPT('$q','".SALT."'));
Per ulteriori informazioni, si prega di consultare questo link: link