Dev random/de
│
Deutsch (de) │
English (en) │
français (fr) │
In diesem Artikel handelt es sich um Unix Programmierung. Es geht in diesem Artikel und um das Erstellen einems zufälligen Initialwerts für den Zufallsgenerator der Funktion random.
Übersicht
Mit /dev/random
und /dev/urandom
gibt es bei Unix und Unix basierenden Betriebsystemen zwei Schnittstellen, die Speicher, Laufwerke und Netzwerk-Dumps aus dem Kernel (und soweit vorhanden und aktiviert Kryptografie-Harware) zu (Pseudo-) Zufallszahlen verarbeiten.
Der Unterschied zwischen /dev/random
und /dev/urandom
liegt darin, das die Schnittstelle /dev/random
unter bestimmten Voraussetzungen blockieren kann, was bei der Schnittstelle /dev/urandom
nicht der Fall ist:
- Wenn die Schnittstelle
/dev/random
Zufallszahlen zurück gibt, dann wartet Sie bis die Zahlen zufällig genug sind. In diesem Zeitraum blockiert die Schnittstelle. - Die Schnittstelle
/dev/urandom
dagegen blockiert nicht, wenn sie Zufallszahlen zurückgibt. Die Zahlen, die diese Schnittstelle zurückgibt, sind weniger zufällig.
Die Verwendung von /dev/random
oder /dev/urandom
erlaubt es ähnlich Zufallswerte zu erstellen wie mit der Funktion random.
Beispiel
Um die Schnittstellen /dev/random
und /dev/urandom
in Free Pascal zu verwenden können wir folgenden code verwenden:
procedure RandomSeed;
var
f : file of integer;
i : integer;
begin
i := 0;
filemode := 0;
AssignFile(f, '/dev/urandom');
reset (f,1);
read (f,i);
CloseFile (f);
// belegen der Systemvariablen RandSeed mit der Zufallszahl
RandSeed := i;
end;
Erklärung
Wie fast alles in Unix oder Unix ähnlichen Betriebssystemen, ist urandom eine Datei! So öffnen wir urandom als Datei und lesen eine Ganzzahl.
Dann nehmen wir die Zufallszahl und übergeben diese der Systemvariablen RandSeed. Mit diesem Initialwert erstellt die Funktion random weitere Zufallszahlen. Ganz genauso wie Sie es mit der Funktion Randomize machen würde. Nur, das die Initialisierung vom Zufall abhängt und nicht aus der aktuellen Systemzeit des Computers ermittelt wird.