Rpi Buster에서 RANDOM과 URANDOM의 다양한 동작

Rpi Buster에서 RANDOM과 URANDOM의 다양한 동작

시스템은 다음과 같습니다:

pi@titania:~ $ cat /etc/os-release 
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

pi@titania:~ $ uname -a
Linux titania.####.net 5.10.103-v7l+ #1529 SMP Tue Mar 8 12:24:00 GMT 2022 armv7l GNU/Linux

난수를 생성할 때 RANDOM과 URANDOM 사이에 서로 다른 동작이 관찰되었습니다. 재치 있게:

pi@titania:~ $ echo $URANDOM | md5sum | head -c 20; echo;
68b329da9893e34099c7

pi@titania:~ $ echo $URANDOM | md5sum | head -c 20; echo;
68b329da9893e34099c7

pi@titania:~ $ echo $URANDOM | md5sum | head -c 20; echo;
68b329da9893e34099c7

pi@titania:~ $ echo $RANDOM | md5sum | head -c 20; echo;
a5355860c5367e0dc179

pi@titania:~ $ echo $RANDOM | md5sum | head -c 20; echo;
521938e64c42075b2b92

pi@titania:~ $ echo $RANDOM | md5sum | head -c 20; echo;
03505fd360ab7ae8378d

URANDOM은 결정론적인 방식으로 동일한 출력을 생성하는 반면, RANDOM은 그렇지 않고 매번 예상과 다른 결과를 반환합니다.

나는 URANDOM을 가능한 한 많이 사용하고 싶었기 때문에 이것이 내 관심을 불러일으켰습니다.

왜 이런 차이가 발생하는지 아는 사람이 있나요?

존 스프링거

답변1

변수 $URANDOM가 비어 있습니다.

$ echo '' | md5sum | head -c 20; echo;
68b329da9893e34099c7

RANDOM나는 당신이 bash 변수에 대해 혼란스러워한다고 생각합니다 (from man bash:

      RANDOM Each time this parameter is referenced, it expands to a  random
              integer  between 0 and 32767.  Assigning a value to RANDOM ini‐
              tializes (seeds) the sequence of random numbers.  If RANDOM  is
              unset,  it  loses  its special properties, even if it is subse‐
              quently reset.

bash다양한 다른 쉘이 RANDOM내장 변수를 제공 하지만 비슷한 이름의 변수가 있는 쉘은 알지 못합니다 URANDOM. 어떤 쉘을 사용하고 있는지는 알려주지 않았지만 표시된 출력에 따르면 쉘은 그것도 제공하지 않으므로 당신이 하고 있는 일은 빈 문자열을 에코하는 것뿐입니다.

나는 당신이 실제로 완전히 다른 것에 /dev/random대해 생각하고 있다고 생각합니다. /dev/urandom다음 중 일부를 읽어 보시기 바랍니다:

관련 정보