2013-03-20 13 views
7

Sto cercando un int32-> funzione di Int32 che èpseudo-casuale dall'aspetto one-to-one int32-> Int32 funzione

  • corrispondenza biunivoca (one-to-one corrispondenza)
  • economico per calcolare almeno in una direzione
  • trasforma la sequenza crescente 0, 1, 2, 3, ... in una sequenza che sembra una buona sequenza pseudo-casuale (~ mezzo bit capovolgi quando l'argomento cambia di un numero piccolo, non ovvio modelli)
+0

Hai provato qualcosa? –

+2

Domanda simile: [Offuscamento di un ID] (http://stackoverflow.com/q/8554286/1009831). –

+0

Quanto costa "economica"? Qualsiasi cifra di blocco ragionevole dovrebbe offrire il tuo desiderio di flip pseudo-casuale/bit. –

risposta

10

Moltiplicare per lar ge numero dispari e xor con uno diverso.

Biiezione: i numeri dispari hanno un potere modulo moltiplicativo inverso di due, quindi la moltiplicazione viene annullata da una moltiplicazione per l'inverso. E xor è, ovviamente, annullato da un altro xor.

Questo è fondamentalmente il funzionamento del generatore di numeri pseudo casuali di congruenza lineare.

3

Probabilmente un sovraccarico per questa attività, ma avete considerato di applicare qualsiasi cripto pseudo random permutation o altri primitivi viene da block ciphers. Ad esempio, può essere fatto utilizzando des con chiave nota in modalità contatore:

younumber xor (des (key, number counter)) 
Problemi correlati