Mis on Pseudo-juhuslik?

Pseudojuhuslikud numbrid luuakse arvutite poolt. Nad ei ole tõeliselt juhuslikud, sest kui arvuti töötab korralikult, ei ole see midagi juhuslikku. Arvutid on deterministlikud seadmed - arvuti käitumine on disaini järgi täiesti prognoositav. Selleks, et luua midagi ettearvamatut, kasutavad arvutid matemaatilisi algoritme, et toota numbreid, mis on piisavalt juhuslikud.

Pseudojuhuslikud numbrid on paljude arvutirakenduste, näiteks mängude ja turvalisuse jaoks hädavajalikud. Mängudes annavad juhuslikud numbrid ettearvamatuid elemente, mida mängija saab reageerida, näiteks juhusliku kuuli eemaldamine või kaardi ülemisest joonestamine.

Arvutiturvalisuses on pseudo-juhuslikkus oluline krüpteerimisalgoritmides, mis loovad koodid, mida ei tohi ennustada ega arvata.

Mis on PRNG?

Pseudo-juhusliku arvu generaator või PRNG on mis tahes programm või funktsioon, mis kasutab matemaatikat juhuslikkuse simuleerimiseks. Seda võib nimetada ka DRNG-ks (digitaalne juhusliku numbri generaator) või DRBG (deterministlik juhusliku bitigeneraator ).

Matemaatika võib mõnikord olla keeruline, kuid üldjuhul nõuab PRNG kasutamine ainult kahte sammu:

  1. Pakkuge PRNG-le suvaline seemne.
  2. Küsi järgmist juhuslikku numbrit.

Seemne väärtus on juhuslike numbrite loomiseks "lähtepunktiks". Väärtust kasutatakse numbrite arvutamisel. Kui seemne väärtus muutub, muutuvad ka genereeritud numbrid ja üksik seemneväärtus tekitab alati samad numbrid. Sel põhjusel ei ole numbrid tegelikult juhuslikud, sest tõelist juhuslikkust ei saa kunagi uuesti luua.

Praegust kellaaega kasutatakse sageli ainulaadse seemneväärtusena. Näiteks, kui see on 5. märtsil 2018, kell 5:03 PM ja 7.01324 sekundit UTC, siis võib seda väljendada täisarvuna. See täpne aeg ei kordu kunagi, nii et PRNG koos selle seemnega peaks looma unikaalse hulga juhuslikke numbreid.

Märkus: juhuslikult genereeritud järjestuse reprodutseerimine võib olla kasulik. Akadeemilistes rakendustes saab simulatsiooniks genereerida massiivse juhuslike väärtuste jada, seejärel taasesitada täpsemat analüüsi hiljem. Veel üheks näiteks on arvutimängudes, kui mängija laadib salvestatud mängu, võivad kõik "juhuslikud" sündmused olla samad, kui mäng pole kunagi peatunud. Nii ei saa mängija sama mängu korduvalt laadida, et proovida paremat õnne.

Kuidas luua pseudojuhuslikku numbrit

Järgnevalt on mõned võimalused pseudo-juhusliku numbri loomiseks ühisprogrammides ja programmeerimiskeeles.

Windowsi käsuviip

Windowsi käsureale või partiifailis tekitab eriline keskkonnamuutuja % RANDOM% pseudo-juhusliku numbri vahemikus 0 kuni 32767, mis on külvatud käsu käivitamise ajaga.

 echo "So% RANDOM%!" 
 "Nii 27525!" 

Pakettfaili loomiseks, mis genereerib juhusliku numbri vahemikus 1 kuni 100:

 copy con sorandom.bat echo off set / a myrand =% RANDOM% * 100/32768 + 1 kaja Arv, mida ma arvasin, oli% myrand%. Kas sa said selle õigesti? 

Batch-faili salvestamiseks vajutage Ctrl + Z ja Enter . Seejärel käivitage fail:

 nii suvaline 
 Arv, mida ma mõtlesin, oli 91. Kas sa said selle õigesti? 

Windows PowerShell

Get-Random cmdlet genereerib juhusliku numbri vahemikus 0 kuni 2, 147, 483, 647 (allkirjastamata 32-bitise täisarvu maksimaalne väärtus).

 Get-Random 
 1333190525 

Cmdlet võtab mitmeid võimalusi, nagu minimaalne ja maksimaalne väärtus. Väärtused on ümardatud allapoole, nii et numbri loomiseks vahemikus 1 kuni 100 seadistage maksimaalne väärtus 101:

 Get-Random -Minimum 1 -Maksimaalne 101 
 99 

Microsoft Excel

Exceli arvutustabelis genereerib valem = RAND () juhusliku numbri vahemikus 0 kuni 1. Näiteks kui tõstate välja lahtri ja sisestate = RAND (), sisaldab rakk numbrit, mis muutub, kui leht on uuesti - arvutatud.

See meetod töötab ka muudes arvutustabeli rakendustes, sealhulgas LibreOffice Calc ja Google'i lehed.

Programmeerimiskeeles

Enamikul programmeerimiskeeltel on oma PRNG funktsioonid. Siin on mõned üldised näited:

C

C programmeerimiskeeles on PRNG funktsioonid defineeritud standardraamatukogus stdlib . Üldine viis seemneks juhuslikuks generaatoriks on aja () funktsiooniga, mis on deklareeritud ajas . Loodud arv langeb vahemikku 0 ja konstantset RAND_MAX, kusjuures süsteemipõhine täisarv on garanteeritud vähemalt 32767.

 #include #include #include void main () {srand (aeg (NULL)); / * seemne generaator * / int rand1 = rand (); / * pseudorandom täisarv vahemikus 0 kuni RAND_MAX * / printf ("Random number vahemikus 0 kuni% d:% d n", RAND_MAX, (int) rand1); / * Või teatud vahemikus: * / int min = 0; int max = 100; float rand2 = (float) rand () * max / RAND_MAX + 1; int round = (int) rand2; printf ("Randomarv vahemikus% d ja% d:% d (% f) n", min, max, ümmargune, rand2); tagasipöördumine; } 

Väljund:

 Juhuslik arv vahemikus 0 kuni 2147483647: 1789080047 Juhuslik arv vahemikus 0 kuni 100: 74 (74.369179) 

C ++

C ++ puhul:

 #include #include #include int main () {srand (aeg (NULL)); std :: cout << "Juhuslik arv vahemikus 0 kuni" << RAND_MAX << ":" << rand () << "n" << "Juhuslik arv vahemikus 1 kuni 100:" << (rand ()% 100) + 1 << std :: endl; tagastamine 0; } 

Väljund:

 Juhuslik arv vahemikus 0 kuni 2147483647: 126569208 Juhuslik arv vahemikus 1 kuni 100: 9 

Python 3

Pythoni juhuslik moodul pakub erinevaid funktsioone juhuslike numbrite genereerimiseks. Selles näites kasutame vahemikus kolme juhusliku täisarvu leidmiseks kolme erinevat meetodit.

 importida juhuslikku kuupäeva importimiskuupäevast random.seed (datetime.now ()) print ("Random number vahemikus [0, 1]:", random.random ()) # Vahemikus. Need kõik teevad sama: print ("Random number vahemikus 1 kuni 100:", ümmargune (random.random () * 100) + 1) print ("Random number vahemikus 1 kuni 100:", juhuslik. 101)) print ("Random number vahemikus 1 kuni 100:", random.randint (1, 100)) 

Väljund:

 Juhuslik arv vahemikus [0, 1]: 0, 05137418896158319 Juhuslik arv vahemikus 1 kuni 100: 27 Juhuslik arv vahemikus 1 kuni 100: 80 Juhuslik arv vahemikus 1 kuni 100: 80 

Perl 5

Perlis:

 srand (aeg); # muutub üks kord sekundis print "Random number vahemikus [0, 1]:", rand (), "n"; print "Random number vahemikus [1, 100]:", int (rand (101)), "n"; 

Väljund:

 Juhuslik arv vahemikus [0, 1]: 0, 691379946963028 Juhuslik arv vahemikus [0, 100]: 82 

JavaScript

 console.log ("Random number vahemikus [0, 1]:" + Math.random ()); console.log ("Random number vahemikus [1, 100]:" Matemaatika.põrand (Math.random () * 101)); 

Vaadake oma veebibrauseri JavaScript-konsooli väljundit (näiteks Firefoxis vajutage Ctrl + Shift + K ):

 Juhuslik arv vahemikus [0, 1]: 0.305008216755414 Juhusliku arvu vahemik [1, 100]: 8 

Märkus: Math.random () funktsiooni ei ole võimalik JavaScriptis külvata. Kui vajate JavaScriptis tugevat PRNG-d, vaadake GitHubis JavaScripti paremaid juhuslikke numbreid.

Näide PRNG: JavaScripti vidin

Kasutades allolevat vidinat, saate külvata PRNG ja kasutada seda juhuslike numbrite loomiseks.

Iga kord, kui genereerite oma seemnest juhusliku numbri, suureneb selle nihkumus 1. Esimene seemnest genereeritud number on nulli nihutatud, teine ​​on nihkunud 1 jne. .

Ainulaadse seemne loomiseks sisestage väljale midagi, mida soovite.

Kasutage nuppu Generate (Loo) järgmise juhusliku numbri saamiseks selle seemne abil ja suurendage nihet.

Nulli nullimiseks nullige nupp Reset.

seemnest saadud arv :

Lähtesta seemnekompensatsioon (praegu 0 )

See vidin kasutab Johannes Baagøe avatud lähtekoodiga PRNG skripte, Alea.js ja Mash.js.

Arvuti turvalisus, programmeerimine, tarkvaratingimused