2016-08-02 5 views
9

Ich muss ein Token für den Einmalgebrauch in PHP generieren. Es gibt zwei Funktionen, die ich dafür verwenden kann, die das gleiche zu tun scheinen: random_bytes und openssl_random_pseudo_bytes. Zum Beispiel mit random_bytes:Erzeuge ein single use Token in PHP: random_bytes oder openssl_random_pseudo_bytes?

var_dump(bin2hex(random_bytes(12))); 

--> string(24) "338f489ec37a2c2b4943905d" 

und mit openssl_random_pseudo_bytes:

var_dump(bin2hex(openssl_random_pseudo_bytes(12))); 

--> string(24) "1c7febea20029bd524fba8e7" 

openssl_random_pseudo_bytes ist PHP 5.3 und höher (so nehme ich es schon länger gewesen ist) und random_bytes ist PHP 7. Ich verwende PHP 7, also kann ich beides verwenden.

Gibt es also einen größeren (oder minderwertigen) Unterschied zwischen den beiden? Wenn nicht, bin ich versucht, mit random_bytes einfach zu gehen, weil es einen einfacheren Namen hat (= Code, der einfacher zu lesen ist).

+0

Es gibt keine wirklichen Unterschiede. –

+0

Ich rate dir nicht, openssl mehr zu verwenden .. viele Sicherheitsberater berichten mir, dass ich aufhören soll, openSSL zu verwenden –

+2

Soweit ich weiß, wie die Bytes von 'random_bytes' generiert werden, ist plattformabhängig, aber der andere benötigt die openssl Erweiterung. – frz3993

Antwort

8

openssl_random_pseudo_bytes ist Teil der OpenSSL Erweiterung, die im PHP-Kompilierungsprozess explizit configured and included sein muss und externe Abhängigkeiten benötigt.

random_bytes ist neu in PHP 7 als die native, immer verfügbare PHP-Methode zum Erzeugen von zufälligen Bytes, die ihre interne Zufälligkeitsquelle abhängig von der Plattform wählt, auf der sie sich befindet. Die Hauptursache für die Einführung von random_bytes war, dass das Generieren von Pseudozufallsdaten in PHP immer ein wenig Kopfzerbrechen bereitet. Entwickler müssen plattformabhängig sein und möglicherweise mehrere verschiedene Fallback-Methoden verwenden, je nachdem, welche Erweiterungen oder Funktionen auf Systemebene erforderlich sind stehen zur Verfügung. Dies führte oft zu Bugs in einzelnen Implementierungen, was insbesondere bei sicherheitsrelevantem Code eine Rolle spielt. random_bytes vereinfacht dies, indem eine Funktion zur Verfügung gestellt wird, die immer verfügbar ist und die bestmögliche Quelle der Zufälligkeit verwendet. Wenn Sie ausschließlich auf PHP 7+ abzielen, sollte dies Ihre Einstiegsmethode sein.

1

Nach PHP Manual

random_bytes: Erzeugt kryptographisch sichere pseudo-zufälligen Bytes openssl_random_pseudo_bytes: Erzeugen einer pseudo-zufälligen Zeichenfolge von Bytes

so Hauptunterschied ist die kryptographisch sichere

(0

Die openssl_random_pseudo_bytes) PHP-Funktion ruft die RAND_psuedo_bytes() OpenSSL-Funktion, die die OpenSSL docs sagen sollte nur für nicht-Verschlüsselungs Zwecke verwendet werden:

https://paragonie.com/blog/2015/07/how-safely-generate-random-strings-and-integers-in-php

+0

Der Ausgabeparameter 'crypto_strong' gibt an, ob die openssl-Methode eine kryptografisch sichere Zeichenfolge zurückgegeben hat oder nicht (abhängig von der Plattform). – SilverlightFox

+0

Sie haben recht .. aber ich bin immer noch nicht vorschlagen es für Sicherheitsprobleme, die in der neuesten PHP-Konferenz in Istanbul berichtet wird PHPKonf http://phpkonf.org/ (Alexander Makarov) –

Verwandte Themen