PHP cripta e il sale - maggiori chiarimenti si prega di
-
25-09-2019 - |
Domanda
Sono stato qui ieri e ottenuto alcuni grandi risposte. Ho preso quello che ho ottenuto e messo insieme, quello che penso sarà un algoritmo abbastanza sicuro. Sto avendo un problema utilizzando Blowfish con un ciclo for che genera il sale.
Sto utilizzando caratteri Base64 e un ciclo for per ottenere una stringa casuale. Voglio prendere questa stringa generata e inserirlo nella funzione cripta, come il sale.
A causa della documentazione su Blowfish è così scarsa e la documentazione di PHP in realtà non menziona neppure esso, io sono una sorta di pugnalare al buio qui.
La cosa veramente strana è se si esegue questo codice così com'è ora, sarà non fallire. Rimuovere il o il '$ 2a $ 07 $' da sopra il ciclo for o dalla funzione cripta e sarà intermittenza restituisce una stringa criptata. La mia comprensione di Blowfish è che la stringa crittografata deve iniziare con '$ 2a $ 07 $' e alla fine in "$', quindi, la concatenazione nella funzione cripta. Io davvero non hanno bisogno la stringa di inizio sopra la per il ciclo e volevamo solo per sbarazzarsi di esso.
Mi piacerebbe anche chiarimenti circa le migliori pratiche sul rimessaggio della sale a caso, sia nel database o , memorizzando l'output della funzione crypt nel database?
Ieri, non vi era alcun codice vero e proprio essere gettato in giro, basta discussione. Mi piacerebbe mettere un po 'di codice insieme oggi e hanno qualcosa che è abbastanza sicuro in posizione. Se qualcuno può venire con un algoritmo migliore, io sono sempre aperto.
$base64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
$salt = '$2a$07$';
for($i=0; $i<60; $i++)
{
$salt .= $base64[rand(0,63)];
}
return crypt('password', '$2a$07$'.$salt.'$');
Soluzione
Sembra che il crypt()
antipatia +
char nel sale, e un sacco di altri caratteri speciali come pure (*
, %
ecc). Se si filtra fuori dovrebbe funzionare su ogni prova (e non c'è bisogno di ripetere la stringa sale id).
Altri suggerimenti
So che questa domanda è storia praticamente antica ora, ma a beneficio di tutti coloro che lo trova con la ricerca di Google, v'è una descrizione abbastanza dettagliata di come il bcrypt / EksBlowfish sali lavoro in risposta a questa domanda:
Perché crypt / Blowfish generare lo stesso hash con due diversi sali?
La risposta breve è, come caf detto, utilizza un alfabeto Base64 composto da [a-zA-Z0-9./]
, con $
come il nulla (non 0) carattere di terminazione / imbottitura. Se si utilizzano i caratteri al di fuori di tale intervallo, o un $
troppo presto, sarà o errore fuori o no interpretare la totalità del sale.