Domanda

Qual è un modo in PHP per fare un caso, sale lunghezza variabile per l'uso in hashing? Diciamo che voglio fare un sale lungo 16 caratteri - come lo farei

Nessuna soluzione corretta

Altri suggerimenti

modifica: l'estensione mcrypt è stato sconsigliato. Per i nuovi progetti dare un'occhiata a
random_bytes (int $ lunghezza)
e il sodio (come di php 7.2 core-) estensione.


Se il mcrypt estensione è disponibile si può semplicemente utilizzare mcrypt_create_iv (dimensione, fonte) per creare un sale.

$iv = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);
var_dump($iv);

Dal momento che ogni byte della "stringa" può essere compreso tra 0-255 hai bisogno di una funzione binaria di sicurezza per salvare / recuperarla.

seconda del sistema operativo, qualcosa di simile:

$fh=fopen('/dev/urandom','rb');
$salt=fgets($fh,16);
fclose($fh);

Si deve leggere sul comportamento dei urandom casuale e.

Mentre altri hanno giustamente sottolineato che non vi alcuni problemi con MD5 e ripetuto hashing, per le password (cioè relativamente brevi stringhe) attacchi di forza bruta prendere la stessa quantità di tempo a prescindere da come sofisticato algoritmo di hash è.

C.

Ecco ho trovato una funzione per generare stringa casuale:

/* random string */
function rand_string( $length ) {
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";  
    $size = strlen( $chars );
    for( $i = 0; $i < $length; $i++ ) {
        $str .= $chars[ rand( 0, $size - 1 ) ];
    }
    return $str;
}

Ci sono due prerequisiti per una buona sale: deve essere lunga, e deve essere casuale. Ci sono molti modi per ottenere questo risultato. Si potrebbe utilizzare una combinazione di microtime e rand, per esempio, ma si potrebbe andare a lunghezze ancora maggiori per garantire che il sale è unico nel suo genere.

Mentre la probabilità di una collisione è trascurabile, tenere a mente che il vostro sale hashing con MD5 o altri algoritmi di collisione incline ridurrà la possibilità che il vostro sale è unico nel suo genere per nessuna ragione.

EDIT: rand() Sostituto per mt_rand(). Come ha osservato Michael, è meglio che rand.

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