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.'$');
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top