2013-03-20 7 views
7

Ich suche eine int32-> int32-Funktion, diePseudo-Zufall aussehende eins-zu-eins int32-> int32 Funktion

  • Bijektion (Eins-zu-Eins-Entsprechung)
  • billig zu berechnet mindestens in eine Richtung
  • transformiert die zunehmende Sequenz 0, 1, 2, 3, ... in eine Sequenz, die wie eine gute Pseudozufallsfolge aussieht (~ halbe Bits spiegeln sich, wenn sich das Argument um eine kleine Zahl ändert, nicht offensichtlich Muster)
+0

Haben Sie irgendwas versucht? –

+2

Ähnliche Fragen: [Verschleierung einer ID] (http://stackoverflow.com/q/8554286/1009831). –

+0

Wie billig ist "billig"? Jede sinnvolle Blockchiffre sollte Ihren Pseudozufalls-/Bit-Flip-Wunsch bieten. –

Antwort

10

Multiplizieren mit einem Lar ge ungerade Zahl und xor mit einer anderen.

Bijektion: ungerade Zahlen haben eine multiplikative inverse Modulo Potenzen von zwei, so dass die Multiplikation durch eine Multiplikation mit der Umkehrung rückgängig gemacht wird. Und xor wird natürlich von einem anderen xor rückgängig gemacht.

Dies ist im Grunde, wie die lineare Kongruenz Pseudo-Zufallszahlengenerator funktioniert.

3

Wahrscheinlich ein Overkill für diese Aufgabe, aber haben Sie in Betracht ziehen, eine beliebige Krypto pseudo random permutation oder andere Primitive von block ciphers. Zum Beispiel kann die Verwendung von des mit einem bekannten Schlüssel im Zählermodus erfolgen:

younumber xor (des (key, number counter)) 
Verwandte Themen