Windows Mobile

Türchen Nummer 10

Eine oft ausgeübte Weihnachtstradition ist das Wichteln. Wem ein einfaches "Zettel aus dem Hut" ziehen zu langweilig ist kann
ja auch ein kleines Programm schreiben um die Wichtel automatisch und zufällig auszuwählen.
Doch oftmals ist das "zufällig" eher wenig vom Zufall bestimmt.
Wie man jedoch richtige Zufallszahlen erzeugen kann zeigt das folgende Codeschnipsel:
C++
#include <wincrypt.h>
//Erzeuge 100 Zufallszahlen
for(int i=0;i<100;i++)
{
 DWORD dwRandomSeed = 0;
 HCRYPTPROV hCrypt; 
 if (CryptAcquireContext(&hCrypt, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
 {
  if (CryptGenRandom(hCrypt, 2, (BYTE*)&dwRandomSeed))
  {
   //Zufallszahlen nur zwischen 0 & 1000
   wprintf(L"RandomNumber %dn",dwRandomSeed%1000);
  }
  CryptReleaseContext(hCrypt, 0);
 }
}
————————————
C#
Im .NET CF kann man sich diesmal glücklich schätzen, einmal ohne P/Invoke auszukommen, da der Security-Namespace einen entsprechende Klasse bereits bereitstellt.
Hier das zugehörige Snippet:
using System.Security.Cryptography;
static void Main(string[] args)
{
    RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
    for (int i = 0; i < 100; i++)
    {
        byte[] randomBytes = new byte[4];
        // Generiere 4 zufällige Bytes.
        rng.GetBytes(randomBytes);
        // Konvertiere 4 bytes in ein Integer (32 bit).
        int seed = (randomBytes[0] & 0x7f) << 24 |
                    randomBytes[1] << 16 |
                    randomBytes[2] << 8 |
                    randomBytes[3];
        // Nur Zahlen zwischen unter 1000;
        seed = seed % 1000;
        Console.WriteLine(seed.ToString());
    }
}
Patrick & Peter

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s