Dr. Baranyai László, fénykép

Dr. Baranyai László

 

Pszeudo véletlen számok

szept 22, 17:48, |

 

A véletlen számok kiemelt jelentőségűek adatvédelmi szempontból, ezért a véletlenszámok generálásával foglalkozó algoritmusok folyamatosan fejlődnek. A véletlenszerű, de bizonyos matematikai szabály(ok) szerint létrehozott számokat hívják pszeudo véletlennek. Elég sokszor lefuttatva a számítást, előbb-utóbb ismétlésbe botlunk. Amíg ez kerülendő kriptográfiában, hasznos lehet más területen.

A selejt hasznosítása

A pszeudo véletlen számok bemutatásához az alábbi primitív algoritmust használom. A függvény értékkészletét a felhasználás határozza meg. Jelen esetben képeket szeretnék létrehozni a folyamat végén, ezért 0-255 tartományba kell essen a választott egész szám.

int A,B,C;

unsigned char PseudoRandom(void) {
 int r;
 r = (A + B*C)%256;
 A = B;
 B = C;
 C = r;
 return (unsigned char)r;
}

A fenti függvény a felhasználás céljának megfelel. A három paraméter rotációja és a végeredmény visszacsatolása biztosítja a pszeudo véletlen viselkedést. Valójában a paraméterek kezdő értékének ismeretében ez előre kiszámítható eredményt ad (determinisztikus és nem sztochasztikus). A siker érdekében az A, B és C paraméterek globális változók.

A bemutatott PseudoRandom() függvény - mint véletlenszám generátor - kifejezetten selejt. Mégis sokan láttuk már az eredményét. A kapott egész számokat egy színes kép RGB értékeiként mentem el. A megjelenő ismétlődő mintázat természetesen függ a kezdő értékektől. Az alábbi képek generálása során a három paraméter egyenlő kezdő értéket kapott (0-255 tartományból).

Pszeudo véletlen számok: 5/5/5
A = 5, B = 5, C = 5

Jól látható az átlósan húzódó minta.

Pszeudo véletlen számok: 9/9/9
A = 9, B = 9, C = 9

Az érték növekedésével sűrűbb mintázatot kapunk, ami a 256 határ gyorsabb túllépését jelzi.

Pszeudo véletlen számok: 99/99/99
A = 99, B = 99, C = 99

Természetesen nem kötelező azonos kiinduló értékeket választani. Az elkészült minták például felhasználhatóak 3D sztereo látással manipuláló képekhez. Ezekhez most nem adtam újabb ábrát, ne is keresse. Ha a létrehozáshoz készített C++ forráskód érdekli, innen letölthető:

A forráskódot GNU C++ fordítóval teszteltem:

$ g++ psimg.cpp -o psimg.bin
$ ./psimg.bin teszt.bmp 1 2 3 0
Creating Pseudo Random Image
1 : 2 : 3
Saving teszt.bmp ... Done.

A program parancssorban várt paraméterei:

  1. a bitmap kép neve (bmp)
  2. az "A" paraméter kezdő értéke
  3. a "B" paraméter kezdő értéke
  4. a "C" paraméter kezdő értéke
  5. opcionális, "1" értékre színes képet készít (alapértelmezett)

Jó szórakozást!

 

comments powered by Disqus