Conversione di un database di 1.000.000 righe

7

Se ho un database che memorizza le credenziali di accesso di 1.000.000 di utenti in PLAINTEXT, quanto impegno mi ci vorrà per md5 hash queste password?

    
posta mahen23 03.06.2011 - 13:22
fonte

3 risposte

19

Per favore non convertirlo in MD5; è non considerato uno schema di hashing sicuro .

Se hai intenzione di convertirli in qualcos'altro; quindi suggerirei di leggere su Sicurezza della password . L'argomento è troppo lungo per entrare nei dettagli qui.

Inoltre, potresti dirci la compagnia in modo che possiamo essere sicuri di non memorizzare le nostre credenziali lì?

    
risposta data 03.06.2011 - 14:35
fonte
11

Il tuo sforzo = lo stesso di se fosse 10 righe. Basta convertirne uno e inserirlo in un ciclo.

Sforzo dei computer = sforzo (tempo) di conversione di una riga * 1000000

L'esatto tempo di esecuzione di creare un md5 da testo semplice è un valore misurabile. Il tempo esatto di esecuzione per convertirli tutti è prevedibile dal primo risultato.

Riconosco che il tuo sforzo sarà in gran parte dedicato alle altre parti del tuo sistema di login e non a questa, come la password dimenticata e simili. Per esempio. se il sistema precedente utilizzava la password esatta per gli utenti, dovrai sostituirla con una funzionalità di reimpostazione della password.

    
risposta data 03.06.2011 - 13:26
fonte
3

Dopo alcuni tentativi ho generato per te una soluzione rapida e dirty

CONSIDERAZIONI PRIMA DI FARE QUESTO ::

  1. Crea innanzitutto un backup del tuo tavolo, (utilizzando questo codice ti ritieni pienamente responsabile di tutti i danni )
  2. In secondo luogo, come menzionato da altri utenti, consideri diverso hash diverso da MD5
  3. Considera Thorbjørn Ravn Andersen commentare l'apprendimento di come eseguire commit e rollback e aggiornare il codice fornito di conseguenza.
  4. Infine considera aggiungendo sale e pepe per il gusto.

Il concetto di base:

SQL::
1  UPDATE 
2      TABLE AS TARGET
3  INNER JOIN 
4      TABLE AS SOURCE
5  ON 
6      TARGET.id = SOURCE.id
7  SET
8      TARGET.[password_field_name] = md5(SOURCE.[password_field_name])
9  WHERE 
10     TARGET.id = SOURCE.id

Ciò che essenzialmente fa è collegare la tabella con la password a se stessa con un join interno. Usa gli alias (Target e Source) per distinguere tra le due copie della tabella. Quindi, usando la normale sintassi Update di sql, l'istruzione Set sulle righe 7 e 8 fa sì che il campo della password nella tabella originale diventi uguale all'hash MD5 della stessa password. Per assicurarsi che questo sql agisca solo su una base per riga, stabiliamo la dichiarazione where usando la chiave primaria della tabella.

    
risposta data 03.06.2011 - 23:34
fonte

Leggi altre domande sui tag