Lavoro con PHP e MySQL e inserisco i dati in forma crittografata usando questa funzione in PHP:
function encrypt_decrypt($action, $string) {
$output = false;
$encrypt_method = "AES-256-CBC";
$secret_key = "This is my secret key";
$secret_iv = "This is my secret iv";
// hash
$key = hash("sha256", $secret_key);
// iv - encrypt method AES-256-CBC expects 16 bytes - else you will get a warning
$iv = substr(hash("sha256", $secret_iv), 0, 16);
if( $action == "encrypt" ) {
$output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
$output = base64_encode($output);
}
else if( $action == "decrypt" ){
$output = openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv);
}
return $output;
}
E ho finito per incontrare un grosso problema.
Devo cercare nella tabella e ho bisogno di usare MySQL LIKE
funzione.
Come posso fare questo?
Ho cercato la documentazione e ho scoperto che MySQL ha la crittografia AES, ma sono completamente perso.
Questa funzione scritta in PHP MySQL esiste o lo fa funzionare?
risposte:
2 per risposta № 1Quando inserisci testo cifrato in MySQL, quello
- è stato crittografato al di fuori di MySQL
- non conserva la somiglianza (poiché la maggior parte delle crittografie non lo sono)
non puoi eseguire a LIKE
cerca su di esso.
Se si sposta la crittografia nel database, è possibile eseguire LIKE
ricerche, ma preparatevi a fare un grosso successo in termini di prestazioni computazionali: fondamentalmente MySQL deve decifrare la colonna completa oltre al costo LIKE
si.
L'opzione migliore è quella di cercare alcune opzioni di riprogettazione, che ti consentono semplicemente di non farlo.