Pseudo-random이란 무엇입니까?

의사 난수 는 컴퓨터에 의해 생성됩니다. 컴퓨터가 올바르게 작동하면 무작위로 작동하지 않기 때문에 실제로는 무작위가 아닙니다. 컴퓨터는 결정적 장치입니다. 컴퓨터의 동작은 설계 상 완전히 예측 가능합니다. 예측할 수없는 무언가를 만들기 위해 컴퓨터는 수학적 알고리즘을 사용하여 "충분히 무작위"인 숫자를 생성합니다.

의사 난수는 게임 및 보안과 같은 많은 컴퓨터 응용 프로그램에 필수적입니다. 게임에서 임의의 숫자는 임의의 총알을 피하거나 갑판 상단에서 카드를 그리는 것과 같이 플레이어가 반응 할 수있는 예기치 않은 요소를 제공합니다.

컴퓨터 보안에서 의사 랜덤 성은 암호화 알고리즘에서 중요합니다. 암호화 알고리즘은 예측하거나 추측해서는 안되는 코드를 만듭니다.

PRNG 란 무엇입니까?

의사 난수 생성기 ( PRNG )는 수학을 사용하여 임의성을 시뮬레이트하는 모든 프로그램 또는 함수입니다. DRNG (디지털 난수 생성기) 또는 DRBG (결정 성 랜덤 비트 생성기) 라고도 합니다.

수학은 때때로 복잡 할 수 있지만, 일반적으로 PRNG를 사용하는 데는 두 단계 만 필요합니다.

  1. PRNG에 임의의 종자를 제공하십시오.
  2. 다음 임의 번호를 물어보십시오.

seed 값은 난수 생성을위한 "시작점"입니다. 이 값은 숫자를 계산할 때 사용됩니다. 시드 값이 변경되면 생성 된 숫자도 변경되고 단일 시드 값은 항상 동일한 수를 생성합니다. 이런 이유로, 숫자는 실제로 무작위 적이 지 않습니다. 왜냐하면 진정한 무작위성은 결코 다시 생성 될 수 없기 때문입니다.

현재 시간은 종종 고유 한 시드 값으로 사용됩니다. 예를 들어 2018 년 3 월 5 일 오후 5시 3 분 및 7.01324 초 UTC 인 경우 정수로 표시 할 수 있습니다. 정확한 시간은 다시는 발생하지 않으므로 그 씨앗이있는 PRNG는 고유 한 난수 집합을 생성해야합니다.

참고 : 무작위로 생성 된 시퀀스를 재현하는 것이 유용 할 수 있습니다. 학계 응용 프로그램에서는 시뮬레이션을 위해 대량의 임의 값 시퀀스를 생성 한 다음 나중에 더 자세한 분석을 위해 정확히 재현 할 수 있습니다. 또 다른 예로, 컴퓨터 게임에서 플레이어가 저장된 게임을로드하면 게임이 중단되지 않은 것처럼 임의의 "임의"이벤트가 동일하게 나타날 수 있습니다. 그렇게하면 플레이어는 동일한 게임을 반복해서 다시로드하여 더 나은 운을 시험해 볼 수 없습니다.

의사 난수 생성 방법

다음은 공통 프로그램 및 프로그래밍 언어에서 의사 난수를 생성 할 수있는 몇 가지 방법입니다.

Windows 명령 프롬프트

Windows 명령 프롬프트 또는 배치 파일에서 특수 환경 변수 % RANDOM % 는 0에서 32767 사이의 의사 난수를 생성합니다.이 값은 명령 프롬프트가 시작된 시간과 함께 설정됩니다.

 echo "그래서 % RANDOM %!" 
 "그래서 27525!" 

1에서 100 사이의 난수를 생성하는 배치 파일을 만들려면 :

 copy con sorandom.bat echo off set / a myrand = % RANDOM % * 100 / 32768 + 1 echo 생각한 번호는 % myrand %입니다. 네가 맞았 니? 

Ctrl + ZEnter 를 눌러 배치 파일을 저장하십시오. 그런 다음 파일을 실행하십시오.

 무작위로 
 내가 생각한 번호는 91 세 였어. 맞았 니? 

Windows PowerShell

Get-Random cmdlet은 0에서 2, 147, 483, 647 사이의 임의의 숫자 (부호없는 32 비트 정수의 최대 값)를 생성합니다.

 겟 - 랜덤 
 1333190525 

cmdlet은 최소값과 최대 값과 같은 여러 가지 옵션을 사용합니다. 값은 반 내림하므로 1에서 100 사이의 숫자를 생성하려면 최대 값을 101로 설정하십시오.

 무작위 - 최소 1 - 최대 101 
 99 

마이크로 소프트 엑셀

Excel 스프레드 시트에서 수식 = RAND () 는 0과 1 사이의 임의의 숫자를 생성합니다. 예를 들어 셀을 강조 표시하고 = RAND ()를 입력하면 셀에 시트가 다시 나타날 때마다 변경되는 숫자가 포함됩니다 -계획된.

이 방법은 LibreOffice Calc 및 Google 스프레드 시트를 비롯한 다른 스프레드 시트 응용 프로그램에서도 사용할 수 있습니다.

프로그래밍 언어에서

대부분의 프로그래밍 언어에는 자체 PRNG 기능이 있습니다. 다음은 몇 가지 일반적인 예입니다.

기음

C 프로그래밍 언어에서 PRNG 함수는 표준 라이브러리 stdlib에 정의됩니다. 난수 생성기를 시드하는 일반적인 방법은 time.h에 선언 된 time () 함수를 사용하는 것입니다. 생성 된 수는 0 과 최소한 32767이되도록 보장 된 시스템 특정 정수인 RAND_MAX 사이에 있습니다.

 #include #include #include void main () {srand (time (NULL)); / * 씨앗 생성기 * / int rand1 = rand (); / * 0과 RAND_MAX 사이의 의사 난수 * / printf ( "0과 % d 사이의 임의의 숫자 : % d \ n", RAND_MAX, (int) rand1); / * 또는 특정 범위 내에서 : * / int min = 0; int max = 100; float rand2 = (float) rand () * max / RAND_MAX + 1; int round = (int) rand2; printf ( "% d와 % d 사이의 난수 : % d (% f) \ n", 최소, 최대, 라운드, rand2); 반환; } 

산출:

 0 ~ 2147483647 사이의 임의의 숫자 : 1789080047 0 ~ 100 사이의 임의의 숫자 : 74 (74.369179) 

C ++

C ++에서 :

 #include #include #include int main () {srand (time (NULL)); std :: cout << "0과"RAND_MAX << "사이의 임의의 숫자 :"<< rand () << ""n "<<" "1과 100 사이의 난수 :"<< (rand () % 100) + 1 << std :: endl; 0을 반환; } 

산출:

 0과 2147483647 사이의 임의의 숫자 : 126569208 1과 100 사이의 임의의 숫자 : 9 

파이썬 3

파이썬의 무작위 모듈은 난수 생성을위한 다양한 함수를 제공합니다. 이 예에서는 범위에서 임의의 정수를 찾는 세 가지 방법을 사용합니다.

 import datetime from datetime import datetime random.seed (datetime.now ()) print ( "범위 [0, 1]의 임의의 숫자 :", random.random ()) # 범위 내에 있습니다. print ( "1과 100 사이의 임의의 숫자 :", random.randrange (1, 100) : "1 ~ 100 사이의 임의의 숫자", round (random.random () * 100) 101)) print ( "1과 100 사이의 임의의 숫자 :", random.randint (1, 100)) 

산출:

 범위 [0, 1]의 난수 : 0.05137418896158319 1과 100 사이의 임의의 숫자 : 27 1과 100 사이의 임의의 숫자 : 80 1과 100 사이의 임의의 숫자 : 80 

펄 5

Perl에서 :

 srand (시간); # 초당 1 회 변경 print "범위 [0, 1]의 임의 번호 :", rand (), "\ n"; 범위 "[1, 100]의 난수 :", int (rand (101)), "\ n"; 

산출:

 범위 [0, 1]의 난수 : 0.691379946963028 범위 [0, 100]의 임의 번호 : 82 

자바 스크립트

 console.log ( "범위 [0, 1]의 임의의 숫자 :"+ Math.random ()); console.log ( "범위 [1, 100]의 임의의 숫자 :"+ Math.floor (Math.random () * 101)); 

웹 브라우저의 JavaScript 콘솔에서 출력을 봅니다 (예 : Firefox에서 Ctrl + Shift + K 누르기).

 범위 [0, 1]의 난수 : 0.305008216755414 범위 [1, 100]의 난수 : 8 

참고 : JavaScript에서는 Math.random () 함수를 시드 할 수 없습니다. 자바 스크립트에서 강력한 PRNG가 필요하다면 GitHub에서 자바 스크립트의 난수를 확인하십시오.

보기 PRNG : 자바 스크립트 위젯

아래 위젯을 사용하여 PRNG를 시드하고 난수를 생성하는 데 사용할 수 있습니다.

주어진 시드에서 임의의 숫자를 생성 할 때마다 오프셋이 1 씩 증가합니다. 시드에서 생성 된 첫 번째 숫자는 오프셋이 0이고 두 번째 숫자는 오프셋 1입니다. 생성기는 항상 주어진 시드와 오프셋에 대해 동일한 숫자를 생성합니다 .

독특한 씨앗을 만들기 위해 원하는 것을 필드에 입력하십시오.

생성 단추를 사용하여 해당 시드를 사용하여 다음 임의의 숫자를 가져오고 오프셋을 증가시킵니다.

재설정 단추를 사용하여 오프셋을 0으로 재설정하십시오.

종자에서 생성 된 번호 :

시드 오프셋 재설정 (현재 0 )

이 위젯은 Johannes Baagøe의 오픈 소스 PRNG 스크립트 인 Alea.js와 Mash.js를 사용합니다.

컴퓨터 보안, 프로그래밍, 소프트웨어 용어