Was ist der beste Weg, um einen Hash zum Speichern einer Sitzung zu generieren? Ich bin auf der Suche nach einer leichten, tragbaren Lösung.Was ist der beste Weg, um einen zufälligen Hash/String zu erstellen?
Antwort
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.
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.
Vielleicht uniqid() ist was du brauchst?
Im Moment verwende ich uniqid(), aber ich habe gelesen, dass die Verwendung von MD5 auf einem uniqid() nicht gut ist. –
Warum möchten Sie MD5 verwenden? Verwenden Sie einfach uniqid. –
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);
Ich benutze nicht die eingebauten PHP-Session-Funktionen, da ich nicht viel Kontrolle über sie habe und vielleicht nicht sicher. –
Ich kann Ihnen versichern, dass sie sicherer sind als jede Funktion, die Sie für sicher halten würden :) –
bin2hex(mcrypt_create_iv(22, MCRYPT_DEV_URANDOM));
- mcrypt_create_iv erhalten Sie eine zufällige Folge von Bytes geben.
- 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.
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). –
Verschiedene Menschen werden unterschiedliche best
Möglichkeiten haben. Aber das ist meine Art und Weise:
- herunterladen
rand-hash.php
Datei: http://bit.ly/random-string-generator include()
es in dem PHP-Skript, das Sie arbeiten. Dann rufen Sie einfachcc_rand()
Funktion. Standardmäßig wird eine zufällige Zeichenkette mit 6 Zeichen Länge zurückgegeben, diea-z, A-Z,
und0-9
enthalten kann. Sie könnenlength
übergeben, um anzugeben, wie viele Zeichencc_rand()
zurückgeben soll.
Beispiel:
cc_rand()
kehrt so etwas wie:4M8iro
cc_rand(15)
etwas Ähnliches wie diese zurück:S4cDK0L34hRIqAS
Prost!
Dies erzeugt keine kryptografisch sicheren Werte, da es ['rand()'] (https://secure.php.net/manual/en/function.rand.php) verwendet. – 0b10011
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)
random_bytes()
ist als PHP 7.0 (oder verwenden this polyfill for 5.2 through 5.6):
$hash = bin2hex(random_bytes(16));
echo serialize($hash);
Output:
s: 32: "c8b2ca837488ff779753f374545b603c";
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)
}
- 1. Was ist der beste Weg, um eine Sitemap zu erstellen?
- 2. Was ist der beste Weg, um einen zufälligen Schlüssel in PHP zu generieren?
- 3. Was ist der beste Weg, um einen Datenrahmen zu umgehen?
- 4. Was ist der beste Weg, um einen ByteArrayOutputStream zu schließen?
- 5. Was ist der beste Weg, um einen "Timer" zu implementieren?
- 6. Was ist der beste Weg, um einen InputStream zu überwachen?
- 7. Was ist der beste Weg, um einen Index zu erstellen, um die schnellste Leseantwort zu erhalten?
- 8. Was ist der beste Weg, um einen zufälligen Pinsel aus der Brushes-Sammlung in C# auszuwählen?
- 9. Was ist der beste Weg, um einen Stream um
- 10. Was ist der beste Weg, um einen eindeutigen Schlüssel zu erstellen und dauerhaft zu verschlüsseln?
- 11. Was ist der beste Weg, um vorberechnete Daten zu implementieren?
- 12. Was ist der beste Weg, um einen Nutch Index aufzufrischen?
- 13. Was ist der beste Weg, um ähnliche Strings zu bearbeiten?
- 14. Was ist der beste Weg, um einen Alias für Attribute in Ruby zu erstellen?
- 15. Was ist der beste Weg, um einen Assistenten in C# 2.0 zu erstellen?
- 16. Was ist der beste Weg, um einen Korrelations-Matrix-Plot wie diesen zu erstellen?
- 17. Was ist der beste Weg, um einen realistischen Highlighter in .NET (mit GDI +) zu erstellen?
- 18. Was ist der beste Weg, um einen Schatten hinter einem UIImageView zu erstellen
- 19. Was ist der beste Weg, um eine Tabelle zu deduplizieren?
- 20. Was ist der beste Weg, um eine Animation zu fahren?
- 21. Was ist der beste Weg, um eine Liste zu kopieren?
- 22. Was ist der beste Weg, um mehrere Aktionen zu behandeln?
- 23. Was ist der beste Weg, um mehrere Suchoptionen zu behandeln?
- 24. Was ist der beste Weg, ein UIButton-Kontrollkästchen zu erstellen?
- 25. Was ist der beste Weg, um mit OSGI zu beginnen?
- 26. Was ist der beste Weg, um ein Verzeichnis zu leeren?
- 27. bash - Was ist der beste Weg, um Ergebnisse zu zählen?
- 28. Was ist der beste Weg, um eine Eigenschaft zu deklarieren?
- 29. Was ist der beste Weg, um in C++ zu casten?
- 30. Was ist der beste Weg, um jQuery zu lernen?
Dank. Ich werde es untersuchen –
MD5 ist gehackt, verwenden Sie sha1 –
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