Hvad er Pseudo-tilfældigt?

Pseudo-tilfældige tal genereres af computere. De er ikke helt tilfældige, fordi når en computer fungerer korrekt, er ingenting det tilfældigt. Computere er deterministiske enheder - en computers adfærd er helt forudsigelig, ved design. Så for at skabe noget uforudsigeligt bruger computere matematiske algoritmer til at producere tal, der er "tilfældige nok".

Pseudo-tilfældige tal er afgørende for mange computerapplikationer, såsom spil og sikkerhed. I spil giver tilfældige tal uforudsigelige elementer, som spilleren kan reagere på, som f.eks. Dodging af en tilfældig kugle eller tegning af et kort fra toppen af ​​et dæk.

I computersikkerhed er pseudo-tilfældighed vigtig i krypteringsalgoritmer, som skaber koder, der ikke må forudsiges eller gættes.

Hvad er en PRNG?

En pseudo-tilfældig talgenerator eller PRNG er et hvilket som helst program eller en funktion, der bruger matematik til at simulere tilfældighed. Det kan også kaldes en DRNG (digital random number generator) eller DRBG (deterministisk tilfældig bit generator).

Matematikken kan undertiden være kompleks, men generelt kræver brug af en PRNG kun to trin:

  1. Giv PRNG et vilkårligt frø.
  2. Bed om det næste tilfældige tal.

Frøværdien er et "udgangspunkt" for at skabe tilfældige tal. Værdien bruges til beregning af tallene. Hvis frøværdien ændres, ændres de genererede tal også, og en enkelt frøværdi vil altid producere de samme tal. Af denne grund er tallene ikke rigtig tilfældige, fordi ægte tilfældighed aldrig kunne genskabes.

Den aktuelle tid bruges ofte som en unik frøværdi. For eksempel, hvis det er 5. marts 2018, klokken 17:03 og 7.01324 sekunder UTC, kan det udtrykkes som et helt tal. Den præcise tid vil aldrig forekomme igen, så en PRNG med det frø skal producere et unikt sæt tilfældige tal.

Bemærk: At kunne gengive en tilfældigt genereret sekvens kan være nyttig. I akademiske applikationer kan en massiv sekvens af tilfældige værdier genereres til en simulering, og derefter reproduceres nøjagtigt til mere detaljeret analyse senere. Som et andet eksempel, i computerspil, hvis en spiller indlæser et gemt spil, kan "tilfældige" hændelser være de samme som hvis spillet aldrig stoppede. På den måde kan spilleren ikke genindlæse det samme spil gentagne gange for at prøve bedre held.

Sådan genereres pseudo-tilfældigt tal

Følgende er nogle måder, du kan oprette et pseudo-tilfældigt nummer i fælles programmer og programmeringssprog.

Windows Command Prompt

Ved kommandoprompten til Windows eller i en batchfil producerer den specielle miljøvariabel % RANDOM% et pseudo-tilfældigt tal mellem 0 og 32767, podet med den tid kommandoprompten startede.

 ekko "Så% RANDOM%!" 
 "Så 27525!" 

At oprette en batchfil, der genererer et tilfældigt tal mellem 1 og 100:

 kopi con sorandom.bat echo off set / a myrand =% RANDOM% * 100/32768 + 1 ekko Nummeret jeg tænkte på var% myrand%. Fik du det rigtigt? 

Tryk på Ctrl + Z og Enter for at gemme batchfilen. Udfør derefter filen:

 så tilfældigt 
 Nummeret jeg tænkte på var 91. Fik du det rigtigt? 

Windows PowerShell

Den tilfældige cmdlet genererer et tilfældigt tal mellem 0 og 2.147.483.647 (maksimumsværdien af ​​et usigneret 32-bit heltal).

 Get-Random 
 1333190525 

Cmdlet'en tager en række muligheder, f.eks. En minimums- og maksimumsværdi. Værdierne er afrundede, så at generere et tal mellem 1 og 100, indstil maksimum til 101:

 Tilfældig -Minimum 1 -Maksimum 101 
 99 

Microsoft Excel

I et Excel-regneark vil formlen = RAND () generere et tilfældigt tal mellem 0 og 1. Hvis du f.eks. Markerer en celle og indtaster = RAND (), indeholder cellen et nummer, der vil ændre sig, når arket er igen -calculated.

Denne metode fungerer også i andre regnearkprogrammer, herunder LibreOffice Calc og Google Sheets.

I programmeringssprog

De fleste programmeringssprog har deres egne PRNG-funktioner. Her er nogle almindelige eksempler:

C

I C programmeringssprog defineres PRNG-funktionerne i standardbiblioteket, stdlib . Den almindelige måde at frø tilfældiggeneratoren er med funktionen time (), erklæret i time.h. Det genererede tal falder mellem 0 og den konstante RAND_MAX, et systemspecifik heltal garanteret at være mindst 32767.

 #include #include #include void main () {srand (tid (NULL)); / * frø generator * / int rand1 = rand (); / * et pseudorandom heltal mellem 0 og RAND_MAX * / printf ("Tilfældigt tal mellem 0 og% d:% d \ n", RAND_MAX, (int) rand1); / * Eller inden for et specifikt område: * / int min = 0; int max = 100; float rand2 = (float) rand () * max / RAND_MAX + 1; int runde = (int) rand2; printf ("Tilfældigt tal mellem% d og% d:% d (% f) \ n", min, maks, runde, rand2); Vend tilbage; } 

Produktion:

 Tilfældigt tal mellem 0 og 2147483647: 1789080047 Tilfældigt tal mellem 0 og 100: 74 (74.369179) 

C ++

I C ++:

 #include #include #include int main () {srand (tid (NULL)); std :: cout << "Tilfældigt tal mellem 0 og" << RAND_MAX << ":" << rand () << "\ n" << "Tilfældigt tal mellem 1 og 100:" << (rand ()% 100) + 1 << std :: endl; returnere 0; } 

Produktion:

 Tilfældigt tal mellem 0 og 2147483647: 126569208 Tilfældigt tal mellem 1 og 100: 9 

Python 3

Det tilfældige modul i Python tilbyder en række funktioner til generering af tilfældige tal. I dette eksempel bruger vi tre forskellige metoder til at finde et tilfældigt helt tal i en rækkevidde.

 Import tilfældigt fra datetime import datetime random.seed (datetime.now ()) print ("Tilfældigt tal inden for rækkevidde [0, 1):", random.random ()) # Inden for en rækkevidde. Disse alle gør det samme: print ("tilfældigt tal mellem 1 og 100:", runde (random.random () * 100) + 1) print ("Tilfældigt tal mellem 1 og 100:", random.randrange (1, 101)) print ("Tilfældigt tal mellem 1 og 100:", random.randint (1, 100)) 

Produktion:

 Tilfældigt tal i rækkevidde [0, 1]: 0, 05137418896158319 Tilfældigt tal mellem 1 og 100: 27 Tilfældigt tal mellem 1 og 100: 80 Tilfældigt tal mellem 1 og 100: 80 

Perl 5

I Perl:

 srand (tid); # ændres en gang pr. sekund udskrivning "Tilfældigt tal inden for rækkevidde [0, 1):", rand (), "\ n"; udskrive "Tilfældigt tal inden for rækkevidde [1, 100]:", int (rand (101)), "\ n"; 

Produktion:

 Tilfældigt tal i rækkevidde [0, 1]: 0, 691379946963028 Tilfældigt tal inden for rækkevidde [0, 100]: 82 

JavaScript

 console.log ("Tilfældigt tal inden for rækkevidde [0, 1):" + Math.random ()); console.log ("Tilfældigt tal inden for rækkevidde [1.100]:" + Math.floor (Math.random () * 101)); 

Se output i din webbrowsers JavaScript-konsol (f.eks. I Firefox-tryk Ctrl + Shift + K ):

 Tilfældigt tal inden for rækkevidde [0, 1]: 0, 305008216755414 Tilfældigt tal inden for rækkevidde [1.100]: 8 

Bemærk: Det er ikke muligt at udlæse Math.random () -funktionen i JavaScript. Hvis du har brug for en robust PRNG i JavaScript, skal du tjekke bedre tilfældige tal for JavaScript på GitHub.

Eksempel PRNG: JavaScript-widget

Ved hjælp af widgeten nedenfor kan du frøde en PRNG og bruge den til at generere tilfældige tal.

Hver gang du genererer et tilfældigt tal fra dit givne frø, stiger dets forskydning med 1. Det første tal, der genereres fra frøet, har kompenseret nul, den anden har forskydning 1 osv. Generatoren producerer altid det samme tal for et givet frø og offset .

Indtast alt hvad du vil have i feltet for at skabe et unikt frø.

Brug knappen Generer til at få det næste tilfældige tal ved hjælp af det frø, og øg forskellen.

Brug Reset-knappen til at nulstille forskydningen til nul.

antal genereret af frø :

Nulstil frøforskydning (i øjeblikket 0 )

Denne widget bruger Johannes Baagøes open source-PRNG-scripts, Alea.js og Mash.js.

Computer sikkerhed, Programmering, Software vilkår