2012-04-12 17 views
7

Qual è la migliore alternativa all'algoritmo Md5 per PHP per crittografare i dati utente come password e altri dati protetti, memorizzati nei database MySQL?Alternativa Md5 in PHP?

+1

md5 è stato violato, utilizzare sha1 –

+1

whirlpool funziona bene. Dovresti dire però cosa stai facendo con esso. – Brad

+3

Dipende da cosa si intende usare. Per il materiale di hashing per verificare i duplicati, MD5 è superbo! –

risposta

13

SHA512 non è una scelta terribile. Ma non passerà molto tempo prima che sia rotto per la maggior parte delle password. Prendi lo Jeff's Advice. Utilizzare bcrypt o PBKDF2. Sono resistenti all'EC2 o ad altre tecniche di elaborazione parallele. Probabilmente non immune, ma resistente.

Il motivo per cui un hash migliore non è migliore in questo caso è ABC in MD5 diventa un valore e ABC in SHA512 diventa un valore. Il calcolo di tutte le password di 3 lettere è actually easier for SHA512 than it was for MD5. La chiave è essere difficili da fare. Ciò significa un hash lento, uno che utilizza molta RAM e/o uno che non può essere fatto facilmente su EC2.

La scelta migliore è NON utilizzare più le password da sole. Decidi se il login è davvero necessario per il tuo sito, e se lo è, prova prima a utilizzare un provider di terze parti. Se questa non è un'opzione, considera una password + token da RSA. Usa solo una password se non hai altre opzioni valide.

Quando si esegue l'hashing di una password, la chiave è hash (password + sale) e il sale deve essere univoco per utente e dovrebbe anche essere difficile o impossibile da indovinare. L'utilizzo del nome utente soddisfa i primi criteri ed è meglio di niente sale o lo stesso sale per ogni utente, ma un salt casuale unico per ogni utente è una scelta migliore.Idealmente in un database separato, se non in una posizione, con le proprie credenziali. Dovrebbe anche essere impostato non sul nome utente, ma su user_id o anche su un hash di user_id. Volete che il database sia a prova di SQL injection. Accettare nessun input dell'utente che non è hash è un buon modo per farlo. E sarebbe saggio lasciare che la query stessa faccia l'hashing. Lento? Sì, ed è anche una buona cosa.

Il sale stesso dovrebbe contenere tutti i dati difficili da prevedere. Nome utente + ID utente + Timestamp + garbage da dev/urandom + l'ultimo tweet con la parola taco in esso. Più è, meglio è. SHA512 è una buona scelta di hash qui.

Riepilogo: hash = bcrypt (password + sale), salt = sha512 (nome utente + user_id + timestamp + microtimestamp + dev/bit casuali + altro rumore).

Se sei ancora preoccupato dopo tutto questo. Sentiti libero di SHA512 la password briptata. Otterrai la forza di SHA512, che, una volta scoperto, rivela solo un hash crittato dalla forza più forte.

0

MCrypt fornisce molti metodi più sicuri (oltre a md5 stesso, btw).

+0

Sì, ma non si discute quali sono più sicuri e perché. – DampeS8N

-1

Si consiglia di leggere la funzione hash. Potresti andare a leggere anche su Mcrypt. Questa è la miglior cosa di hash per ora, immagino. Mcrypt fornisce hashing in base al ciclo della CPU.

1

È possibile utilizzare hash in questo modo, si dispone di un ampio algoritmo per l'hash dei dati.

hash('sha256', $data); 
3

MD5 non è più consigliato. La maggior parte delle installazioni php include l'estensione hash. La scelta migliore per una funzione di hash sarebbe attualmente SHA-512. È possibile utilizzare SHA-512 con la seguente funzione:

<?php 
    function sha512($string) { 
     return hash('sha512', $string); 
    } 
?> 

Non ci sono altre alternative con dimensioni più piccole di uscita se lo si desidera, ad esempio SHA-256 o RIPEMD-160.

Aggiornamento: Leggendo la tua domanda aggiornata, suggerisco la funzione php crypt.

+0

Falso. sha384 è più sicuro: http://en.wikipedia.org/wiki/SHA_hash_functions –

+1

Più sicuro di 'SHA-256', sì. Più sicuro di 'SHA-512', no. Dove hai letto questo? –

8

Prova l'hash funzione PHP() http://php.net/manual/en/book.hash.php

codice Esempio:

$hash = hash('SHA512', $pass); 

Questo trasforma questo:

SHA512("The quick brown fox jumps over the lazy dog") 

Into:

0x07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6 

Ulteriore lettura: 012.351.http://en.wikipedia.org/wiki/SHA-2

+0

[SHA512 non è una cattiva scelta, ma non la scelta migliore.] (Http://www.codinghorror.com/blog/2012/04/speed-hashing.html) – DampeS8N

+0

Non sono d'accordo. – CodeTalk

+6

Cercate di dimostrare perché non siete d'accordo? – DampeS8N