Sto imparando la funzione di crypt() di PHP e ho eseguito alcuni test con esso. Secondo this post, dovrei usare un sale lungo 22 caratteri. Tuttavia, posso usare una stringa lunga 23 caratteri con alcune limitazioni. Quando uso una stringa lunga 22 caratteri, ottengo sempre un risultato di "$ 2y $ xxStringStringStringStri.HashHashHashHashHashHashHashHas". So che il periodo è solo una parte del sale.Perché non dovrei usare il 23esimo carattere in una funzione di crypt() salt?
Sembra che se utilizzo 23 caratteri anziché solo 22, posso generare correttamente diversi hash, ma ci sono solo 4 risultati diversi per tutti i 64 caratteri. Il carattere 23 "arrotonda" con l'approssimazione di 1/4 ° dell'alfabeto 64 caratteri (ad esempio, il carattere 23 è "W" e arrotonda fino a "O" o qualsiasi numero giri fino a "u")
v---------------v---------------v---------------v---------------
./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890
Tutti e quattro di queste funzioni cripta generano lo stesso sale:
crypt('Test123','$2y$09$AAAAAAAAAAAAAAAAAAAAAq');
crypt('Test123','$2y$09$AAAAAAAAAAAAAAAAAAAAAr');
crypt('Test123','$2y$09$AAAAAAAAAAAAAAAAAAAAAs');
crypt('Test123','$2y$09$AAAAAAAAAAAAAAAAAAAAAt');
Ma questo è diverso:
crypt('Test123','$2y$09$AAAAAAAAAAAAAAAAAAAAAu');
Allora, perché non dovrei utilizzare il carattere 23, quando in grado di generare con successo esiti diversi? C'è qualche tipo di comportamento glitch in PHP che dovrebbe essere evitato non utilizzandolo?
Per chiarimenti su come io sto contando il personaggio 23 nel sale:
crypt('Test123','$2y$08$ABCDEFGHIJKLMNOPQRSTUV');
// The salt is '$ABCDEFGHIJKLMNOPQRSTUV'
// Which will be treated as '$ABCDEFGHIJKLMNOPQRSTUO'
C'è una buona spiegazione su questa domanda: http://security.stackexchange.com/questions/20862/php-crypt-trims-the-salt-as-it-would-be-too-long –
Grazie per questa risposta Anche se questo risolve solo ciò che accade al 23 ° carattere in quanto viene abbreviato solo a causa delle dimensioni dei bit consentiti nella funzione crypt(). La mia domanda, in un altro modo di chiedere, è "Dovrei usare il 23 ° carattere anche se verrà tagliato a pezzi in due bit?" o un altro modo è "C'è un problema nell'algoritmo di PHP che genera hash errati ogni volta che viene usato il 23 ° carattere?" – Andrew