Ho intenzione di prefigurare ciò dicendo che non ho assolutamente alcun indizio quando si tratta di crittografia, ma sto postando questa domanda perché sono molto interessato e non ho dubbi che ci siano alcune persone intelligenti qui che lo faranno essere in grado di spiegarmelo come se avessi 5 anni.
Quindi, per quanto ne so, md5 è considerato insicuro a causa della rapidità con cui le cose possono essere sottoposte a hash, il che significa che gli attacchi di forza bruta sono molto facili e gli attaccanti potrebbero anche confrontare una password md5 con hash su una tabella pre-generata.
Ecco perché quando (usando php) computo md5("password");
e mi dà 5f4dcc3b5aa765d61d8327deb882cf99
Posso collegare quel valore in un sito come questo e in 45ms sputa indietro 5f4dcc3b5aa765d61d8327deb882cf99 MD5 : password
Ma cosa succede se aggiungo alcuni dati di "aiuto" all'inizio e alla fine della mia password?
<?php
$helper = "Qw3r7y1uioP[4]AsdfGh5jkl3'z7xcvb9nm,.?";
echo md5($helper."password".$helper);
?>
Restituisce 9f1f60fc8d76caa77b11810a0d68e0c5
(che lo stesso sito non è in grado di decifrare, anche se non sono sicuro che le tabelle arcobaleno potrebbero, sembra improbabile anche se vero?) che potrei quindi memorizzare, insieme al "helper" da confrontare a futura password inviata per posta:
<?php
$helper = "Qw3r7y1uioP[4]AsdfGh5jkl3'z7xcvb9nm,.?";
$accepted = "9f1f60fc8d76caa77b11810a0d68e0c5";
$pass = $_POST["password"];
if (md5($helper.$pass.$helper)==$accepted) {
echo "Password was correct.";
} else {
echo "Password was incorrect.";
}
?>
Cosa c'è di sbagliato in questo approccio? Sono sicuro che c'è qualche ragione per cui non è una buona idea, semplicemente non ho abbastanza comprensione di come md5 e la crittografia in generale funziona per capire perché.