Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Random mit Dec (https://www.delphipraxis.net/129813-random-mit-dec.html)

cookie22 26. Feb 2009 02:17


Random mit Dec
 
hallo,

ich hab folgendes problem, ich möchte mir mit dec eine zufalls zahl ausgeben lassen und zwar so wie mit dem random von delphi.

im moment mach ich das so, was aber sehr unschön ist, hat jemand eine bessere idee.

Delphi-Quellcode:
function GetRandom(range: Byte): integer;
var
  i: Byte;
begin
  Result := -1;
  RandomSeed;
  repeat
    RandomBuffer(i, sizeof(i));
  until
    (i < range) and (i <> -1);
  Result := i;
end;
für alle tips wär ich dankbar.

Gruss,
cookie

sx2008 26. Feb 2009 03:53

Re: Random mit Dec
 
Delphi-Quellcode:
function GetRandom(range: Byte): integer;
var
  i: Cardinal;
begin
  // RandomSeed; // WEG, darf nur einmal aufgerufen werden
  RandomBuffer(i, sizeof(i));
  Result := i mod range;
end;

cookie22 26. Feb 2009 04:30

Re: Random mit Dec
 
vielen dank erst mal. :-D

warum darf ich randomseed nur einmal aufrufen?

mkinzler 26. Feb 2009 07:28

Re: Random mit Dec
 
Weil sich die Zufallszahlen sonst wiederholen würden

cookie22 26. Feb 2009 07:49

Re: Random mit Dec
 
der zufallsgenerator wird doch mit der aktuellen systemzeit bzw. anderen zufalls daten initialisiert, wie kann sich dann da was wiederholen? die voraussetzungen sind doch völlig anders. macht nicht gerade das nen cryptographisch sicheren random generator aus, dass sowas nicht passiert?

Luckie 26. Feb 2009 08:20

Re: Random mit Dec
 
Von Randomize weiß ich, dass man es nur einmal aufrufen sollte. Wie das mit RandomSeed ist, kann ich im Moment nicht sagen, da keine Delphihilfe zur Verfügung.

Billa 26. Feb 2009 08:22

Re: Random mit Dec
 
Ich sitze gerade nicht am Delphi-Rechner, aber ich würde sagen: Im Zweifel macht ein Versuch kluch ...

cookie22 26. Feb 2009 08:29

Re: Random mit Dec
 
es geht hier um das randomseed von dec 5.2. das ist doch ein yarrow random generator, da der cryptoraphisch sicher ist, sollte das eigentlich nix ausmachen. genau das unterscheidet ihn doch vom delphi randomize. oder sitze ich da einem irtum auf? :?

sx2008 26. Feb 2009 08:43

Re: Random mit Dec
 
Wenn man einen Zufallsgenerator hat, dann setzt man einmal den Anfangswert (Seed = Samen) und lässt ihn dann in Ruhe arbeiten.
Es spielt dabei keine Rolle, welcher Art der Zufallsgenerator ist; es ist immer das gleiche Prinzip.
Wenn man immer wieder die Initialisierung neu vornimmt, dann ist ja der Zufallsgenerator ausser Kraft gesetzt.

Meflin 26. Feb 2009 08:49

Re: Random mit Dec
 
Zitat:

Zitat von sx2008
Es spielt dabei keine Rolle, welcher Art der Zufallsgenerator ist; es ist immer das gleiche Prinzip.
Wenn man immer wieder die Initialisierung neu vornimmt, dann ist ja der Zufallsgenerator ausser Kraft gesetzt.

Wenn man mit konstanten Werten Seeded mag das ein Problem sein. Aber wenn du zum Beipsiel Umgebungsgeräsuche als Seed benutzt, kannste seeden so oft du willst - das tut überhauptkeinen Abbruch.

Assertor 26. Feb 2009 10:47

Re: Random mit Dec
 
Hi,

ich würde den RandomSeed der DEC nur einmal aufrufen. Mehrfach stellt zwar technisch kein Problem dar, aber ob es die Sicherheit erhöht...

Wer es theoretisch sicherer haben will, nutzt - wie oben schon genannt - echte Zufallsdaten. Dafür gibt es ein Overload der Prozedur RandomSeed mit
Delphi-Quellcode:
procedure RandomSeed(const Buffer; Size: Integer);
Wird nur RandomSeed() verwendet, wird ein pseudozufälliger Seed aus der Systemzeit und dem PerformanceCounter erzeugt. Mit einem Buffer mit echten Zufallsdaten ist das natürlich besser. Dann kann man z.B. Daten, die aus Mausbewegungen und Tastatureingaben des Benutzers erzeugt werden nutzen, so wie es bei TrueCrypt geschieht.

Gruß Assertor

cookie22 27. Feb 2009 00:53

Re: Random mit Dec
 
jo danke für die antworten. also kann man es mehrfach aufrufen, es bringt nur nicht wirklich was.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz