Domanda

Ho bisogno di un algoritmo che praticamente girare un unix timestamp in un adeguato numero casuale, in modo che se ho "riprodurre" il timestamp ho la stessa di numeri casuali.

E qui è quello che voglio dire opportunamente:

  1. La maggior parte degli umani non rilevare un loop o un modello in numeri casuali.
  2. Non hanno bisogno di essere protetti da crittografia.
  3. Tutti i numeri devono essere in grado di essere generato.(Ho scoperto che LFSR non fare questo)
  4. I numeri sono numeri interi a 32 bit

E vorrei essere abbastanza veloce.

Finora la mia idea è di soli semi di un PRNG più e più volte, ma non sono sicuro se questo è il modo migliore per gestire questo.

Tutti i pensieri e le idee saranno molto apprezzati.

Grazie.

È stato utile?

Soluzione

Se non ha bisogno di essere statisticamente casuale, forse alimentare i timestamp per MD5 e troncare l'hash. Il problema principale è che non so se questo sarebbe surjective. Altri algoritmi di hashing potrebbe funzionare meglio.

Altri suggerimenti

Vorrei suggerire che la cosa più semplice da fare è nutrire il vostro tempo a jrand48.Qualcosa di simile

#include <stdlib.h>
int mix(int t) {
    unsigned short x[3] = {t, t<<16, t};
    return jrand48(x);
}

È reversibile (216·x+n≡0x5deece66d·(232+1)·t+0xb mod 248 ⇒ t≡0xdfe05bcb1365·(216·x+n-0xb) mod 248 dove n∈[0,216)) ma quanto è alta 32 bit di 48 bit, è in realtà non troppo facile.(È possibile applicare jrand48 per x più di una volta di troppo;finchè non si applica 248-1 volte, lo stesso tipo di proprietà attesa).

Suggerisco di guardare la famiglia POSIX-compliant drand48() di funzioni. Danno decenti (ma certamente non crittografici) numeri casuali, e srand48() prende un valore di seme a 32 bit. Essi sono deterministici, così riutilizzare un dato seme rigenererà la stessa sequenza di numeri di nuovo.

(timestamp ^ 0x12345678) + 12345678 È questo abbastanza sottile?

Se non si preoccupano reversibilità di esso si potrebbe crc32 ogni timestamp.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top