Such PRNG



  • Hallo!
    Ich programmiere gerade ein Programm, mit dem man aus einem masterpasswort eine Liste anderer Passwörter generieren kann.
    Dafür brauche ich einen Zufallszahlengenerator, den ich mit den Passwort bzw. mit einem Hash seeden kann.
    Bisher habe ich es mir dem OpenSSL RAND-Generator versucht, dieser produziert jedoch bei demselben Seed nicht dieselben Resultate (wahrscheinlich. weil dieser PRNG auf Sicherheit getunt ist und nicht auf Reproduzierbarkeit).
    Die anderen üblichen RNGs wie z.B. MersenneTwister.h oder boost::random kann ich meines Wissens nicht mit Typen seeden, die nicht int oder long sind.
    Da ich selbst freie Software programmiere, muss die entsprechende Bibliothek auch freie Software sein (und unter Linux laufen)
    Kennt ihr einen PRNG, der diese Bedingungen erfüllt.

    Danke, Hans



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Letzten Endes wird jeder PRNG mit einer Zahl geseedet, da wirst du nicht drum rum kommen. Du musst also einen Weg finden, deine Typen zu einer Zahl zu verarbeiten (Hashen o. AE.).



  • Hi, erstmal vielen Danke für deine Antwort!

    Blue-Tiger schrieb:

    Letzten Endes wird jeder PRNG mit einer Zahl geseedet..

    Kennst du dann einen PRNG, der inkrementell seedbar ist (wie folgt):

    void seed(void* data, size_t dataSize) //data = data to seed
    {
    srng r = new srng() //some rng;
    long* longData = &(reinterpret_cast<long>(data));
    for(int i = 0;i < dataSize;i++)
      {
         r->seedIncremental(longData[i]);
      }
    }
    


  • Nein, kenn ich nicht. Warum willst du deinen "grossen" Wert nicht einfach vorher hashen?



  • Kann ich schon machen, aber mit welchem Algorithmus krieg ich einen 64-Bit-Hashwert von einem Objekt (und welche Bibliothek gibt mir das dann nicht als string aus)?

    mfg, Hans



  • Golem86 schrieb:

    Kann ich schon machen, aber mit welchem Algorithmus krieg ich einen 64-Bit-Hashwert von einem Objekt (und welche Bibliothek gibt mir das dann nicht als string aus)?

    mfg, Hans

    Du koenntest jede beliebige Hashfunktion nehmen (SHA-1 z. B.), und einfach die ersten 64 Bit der Ausgabe abschneiden. Eine Implementation, die dir die Zahl zurueckgibt und nicht bereits den Hex-String, laesst sich sicher finden... aber selbst wenn nicht, hexstring->int - Umwandlung ist nicht sooo schwer 🙂

    Eine andere Methode, die mir gerade eben erst eingefallen ist, und die ohne Hashing auskommt und quasi "inkrementell" geseedet werden kann): du koenntest dir einen eigenen PRNG als Konstrukt mehrerer LSFR (httpe://en.wikipedia.org/wiki/Linear_feedback_shift_register) basteln (ganz simpel z. B.: http://en.wikipedia.org/wiki/Alternating_step_generator ). Dazu unterteilst du deinen "grossen" Seed in mehrere kleine, und jeder initialisiert einen eigenen LSFR... je nachdem wie "sicher" und gut deine PRNGs sein sollen (wie leicht kann auf Seeds geschlossen werden, wie "Zufaellig" sind die generierten Zahlen wirklich, ...) , ists allerdings von Vorteil, wenn du etwas Ahnung von der Materie hast.



  • Danke, genau das war die Idee, die ich gebraucht habe!
    Ich wer erst mal die cut-Methode verwenden, den LSFR-Generator kann ich später immer noch implementieren (werde ich auch tun) 🙂

    mfg, Hans


Log in to reply