2010-02-19 9 views

Antwort

8

Sie können die integrierten Hashfunktionen von PHP verwenden, sha1 und md5. Wähle einen, nicht beides.

Man könnte denken, dass die Verwendung beider, sha1(md5($pass)) eine Lösung wäre. Wenn Sie beide verwenden, wird Ihr Kennwort nicht sicherer, es verursacht redundante Daten und macht keinen Sinn.

Werfen Sie einen Blick auf sie geben einen guten Artikel mit Schwächen und die Verbesserung der Sicherheit mit Hashing.

Nonce steht für "n verwendet einmal". Sie werden auf Anfragen verwendet, um unautorisierten Zugriff zu verhindern, sie senden einen geheimen Schlüssel und überprüfen den Schlüssel jedes Mal, wenn Ihr Code verwendet wird.

Sie können PHP NONCE Library from FullThrottle Development

+0

Dank. Ich werde es untersuchen –

+5

MD5 ist gehackt, verwenden Sie sha1 –

+4

SHA1 kann auch gebrochen werden (zumindest theoretisch). Weitere Informationen finden Sie unter [Zusammenfassung der Hashfunktionssicherheit] (https://en.wikipedia.org/wiki/Hash_function_security_summary). Ich würde mit SHA256 oder SHA512 gehen. – colan

0

bei mehr Besuche ich persönlich mod_unique_id Apache verwenden, um eine zufällige eindeutige Nummer zu generieren meine Sitzungen zu speichern. Es ist wirklich einfach zu benutzen (wenn Sie Apache verwenden).

Für Nonce werfen Sie einen Blick hier http://en.wikipedia.org/wiki/Cryptographic_nonce gibt es sogar einen Link zu einer PHP-Bibliothek.

8

Vielleicht uniqid() ist was du brauchst?

uniqid — Generate a unique ID

+0

Im Moment verwende ich uniqid(), aber ich habe gelesen, dass die Verwendung von MD5 auf einem uniqid() nicht gut ist. –

+7

Warum möchten Sie MD5 verwenden? Verwenden Sie einfach uniqid. –

0

ich nicht im Allgemeinen manuell Session-IDs verwalten. Ich habe etwas in dieser Richtung gesehen, das empfohlen wird, Dinge ein wenig vorher zu vermischen, ich habe mich nie selbst benutzt, daher kann ich nicht bestätigen, dass es besser oder schlechter ist als der Standard (Hinweis: Dies ist für Autogen und nicht für manuelles Management).

//md5 "emulation" using sha1 
ini_set('session.hash_function', 1); 
ini_set('session.hash_bits_per_character', 5); 
+0

Ich benutze nicht die eingebauten PHP-Session-Funktionen, da ich nicht viel Kontrolle über sie habe und vielleicht nicht sicher. –

+2

Ich kann Ihnen versichern, dass sie sicherer sind als jede Funktion, die Sie für sicher halten würden :) –

62
bin2hex(mcrypt_create_iv(22, MCRYPT_DEV_URANDOM)); 
  1. mcrypt_create_iv erhalten Sie eine zufällige Folge von Bytes geben.
  2. bin2hex wird es in ASCII-Text umwandeln

Beispiel Ausgabe:

d2c63a605ae27c13e43e26fe2c97a36c4556846dd3ef 

Bare daran, dass "beste" ist ein relativer Begriff. Sie haben einen Kompromiss zwischen Sicherheit, Einzigartigkeit und Geschwindigkeit. Das obige Beispiel ist gut für 99% der Fälle, wenn Sie jedoch mit besonders sensiblen Daten zu tun haben, möchten Sie vielleicht über die difference between MCRYPT_DEV_URANDOM and MCRYPT_DEV_RANDOM lesen.

Schließlich gibt es eine RandomLib "zum Generieren von Zufallszahlen und Strings verschiedener Stärken".

Beachten Sie, dass ich bisher angenommen habe, dass Sie zu suchen eine zufällige Zeichenfolge, erzeugen, die nicht das gleiche ist wie einen Hash von einem Wert abzuleiten. Für Letzteres, siehe password_hash.

+5

Nur ein wenig PSA: 'mcrypt_create_iv' wurde in PHP 7.1.0 nicht weiter unterstützt. Verwenden Sie stattdessen ['random_bytes'] (http://uk1.php.net/manual/en/function.random-bytes.php). –

-3

Verschiedene Menschen werden unterschiedliche best Möglichkeiten haben. Aber das ist meine Art und Weise:

  1. herunterladen rand-hash.php Datei: http://bit.ly/random-string-generator
  2. include() es in dem PHP-Skript, das Sie arbeiten. Dann rufen Sie einfach cc_rand() Funktion. Standardmäßig wird eine zufällige Zeichenkette mit 6 Zeichen Länge zurückgegeben, die a-z, A-Z, und 0-9 enthalten kann. Sie können length übergeben, um anzugeben, wie viele Zeichen cc_rand() zurückgeben soll.

Beispiel:

  1. cc_rand() kehrt so etwas wie: 4M8iro

  2. cc_rand(15) etwas Ähnliches wie diese zurück: S4cDK0L34hRIqAS

Prost!

+0

Dies erzeugt keine kryptografisch sicheren Werte, da es ['rand()'] (https://secure.php.net/manual/en/function.rand.php) verwendet. – 0b10011

4

Sie können seit PHP 5.3.0 openssl_random_pseudo_bytes verwenden, um eine Pseudozufallsfolge von Bytes zu generieren. Sie können diese Funktion verwenden und es in irgendeiner Weise zu Zeichenfolge konvertieren eine dieser Methoden verwenden:

$bytes = openssl_random_pseudo_bytes(32); 
$hash = base64_encode($bytes); 

oder

$bytes = openssl_random_pseudo_bytes(32); 
$hash = bin2hex($bytes); 

Die erste wird die kürzeste Zeichenfolge, mit Zahlen erzeugen, Kleinbuchstaben, Groß- und einige Sonderzeichen (=, +, /). Die zweite Alternative wird Hexadezimalzahlen erzeugen (0-9, af)

0

Verwenden Sie random_bytes(), wenn es verfügbar ist!

$length = 32;

if (function_exists("random_bytes")) { 
    $bytes = random_bytes(ceil($lenght/2)); 
    $token = substr(bin2hex($bytes), 0, $lenght) 
} 

Check it on php.net

Verwandte Themen