Se si prendono gli indirizzi n , la probabilità di una collisione (due indirizzi distinti con hashing dello stesso valore) è vicino a n 2 * 2 -159 (per valori pratici di n ). In pratica, puoi ignorare totalmente il rischio di una collisione (il rischio di essere masticato a morte da un orso rabbioso è molto più alto di quello).
Nota però che:
-
SHA-1 ha alcuni punti deboli crittografici, che rendono un po 'più facile per un individuo malintenzionato creare appositamente due distinti indirizzi e-mail che avranno lo stesso valore. Questa è ancora una debolezza teorica, perché mentre il metodo descritto è più veloce del costo teorico di 2 80 , comporta ancora il numero sostanziale di 2 61 valutazioni della funzione hash. Inoltre, potrebbe essere difficile riadattare la collisione calcolata nel formato degli indirizzi email. Ad ogni modo, potresti essere un po 'più cauto nell'usare SHA-256 invece di SHA-1 (e avrà un aspetto migliore se verrà controllato).
-
Gli indirizzi email possono essere distinti tra maiuscole e minuscole. In particolare, il nome di dominio (dopo "@") è, per statuto, non sensibile al maiuscolo / minuscolo, quindi example.com
, Example.COM
e exAmPLE.cOM
sono tutti equivalenti. Per ciò che appare prima il segno '@', questo è dipendente dal sito. Potresti voler fare un po 'di normalizzazione prima dell'hashing, ed è possibile che non ci sia una buona soluzione che funzionerà con tutti gli indirizzi email esistenti.
Modifica: sebbene questo risponda alla tua domanda esatta, ti consigliamo di guardare la risposta di @CodeInChaos, che cerca di vedere un po 'più in profondità il tuo problema: se è possibile fornire un indirizzo email e verifica che corrisponda a un hash memorizzato, quindi rende possibile "provare" potenziali indirizzi email contro il valore hash e tende a funzionare. Questa è una variante dell'attacco del dizionario e potrebbe essere o non essere un grosso problema con il tuo modello di sicurezza.