Frage

Was ist ein Weg, in PHP ein zufälliges, variable Länge Salz in Hashing für den Gebrauch zu machen? Lassen Sie uns sagen, dass ich ein 16-Zeichen lange Salz machen wollen - wie würde ich es tun

Keine korrekte Lösung

Andere Tipps

edit: die Mcrypt Erweiterung ist veraltet. Für neue Projekte zu sehen,
random_bytes (int $ length)
und die Natrium (als PHP 7.2 core-) Verlängerung.


Wenn die Mcrypt Erweiterung verfügbar ist können Sie einfach verwenden mcrypt_create_iv (Größe, Quelle) ein Salz zu erstellen.

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

Da jedes Byte des „string“ kann im Bereich zwischen 0-255 Sie eine binären sicheren Funktion benötigen zum Speichern / abrufen es.

je nach Betriebssystem, so etwas wie:

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

Do lesen, auf das Verhalten von zufälligen und urandom.

Während andere zu Recht darauf hingewiesen, dass es einige Probleme mit md5 und wiederholten Hashing für Passwörter (das heißt relativ kurze Strings) Brute-Force-Angriffe die gleiche Menge an Zeit in Anspruch nehmen, unabhängig davon, wie hoch entwickelt der Hashing-Algorithmus ist.

C.

Hier ist ich eine Funktion gefunden zufällige Zeichenfolge zu generieren:

/* 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;
}

Es gibt zwei Voraussetzungen für ein gutes Salz: Es lang sein muss, und es muss zufällig sein. Es gibt viele Möglichkeiten, dies zu erreichen. Sie könnten eine Kombination aus microtime und rand verwenden, zum Beispiel, aber Sie könnten zu noch größeren Längen gehen, um sicherzustellen, dass Ihr Salz einzigartig ist.

Während die Chance einer Kollision vernachlässigbare ist, denken Sie daran, dass Ihr Salz mit MD5-Hashing oder anderem Kollision anfälligen Algorithmen wird die Chance verringern, dass Ihr Salz ohne Grund einzigartig ist.

EDIT: Ersatz rand() für mt_rand(). Wie Michael erwähnt, es ist besser als rand.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top