无处不在我看来它在Linux上/dev/urandom
是"随机",但没有任何来源我可以找到引用什么样的随机"随机"是。我希望它在字节上的0x01到0xff接近均匀。如果我想测试一下,那么估算分布的最佳方法是什么? bash
首选的解决方案。
答案 0 :(得分:2)
这是一个Python程序,它显示它非常均匀(至少在macOS上):
import os
cnt, start=[10000000]*2
buckets={}
while cnt:
c=os.urandom(1)
buckets.setdefault(c, 0)
buckets[c]+=1
cnt-=1
ideal=1/256.0
if len(buckets) != 256: print('{} missing keys'.format(256-len(buckets)))
for k, v in sorted(buckets.items()):
actual=float(buckets[k])/start
print('{:8} {:10.4%} {:10.4%}'.format(repr(k), actual, actual-ideal ))
打印:
b'\x00' 0.3892% -0.0014%
b'\x01' 0.3950% 0.0044%
b'\x02' 0.3856% -0.0050%
b'\x03' 0.3901% -0.0006%
b'\x04' 0.3894% -0.0013%
b'\x05' 0.3881% -0.0025%
b'\x06' 0.3912% 0.0006%
b'\x07' 0.3912% 0.0005%
b'\x08' 0.3951% 0.0044%
b'\t' 0.3928% 0.0022%
b'\n' 0.3877% -0.0029%
...
b'\xf7' 0.3914% 0.0008%
b'\xf8' 0.3906% -0.0001%
b'\xf9' 0.3917% 0.0011%
b'\xfa' 0.3910% 0.0004%
b'\xfb' 0.3884% -0.0022%
b'\xfc' 0.3915% 0.0009%
b'\xfd' 0.3904% -0.0002%
b'\xfe' 0.3894% -0.0013%
b'\xff' 0.3914% 0.0008%
答案 1 :(得分:1)
回答我自己的问题:
cat /dev/urandom | hexdump -n 100000000 -v -e '/1 "0x%02X\n"' | sort -n | uniq -c | awk '{print $1/100000000"\t"$2;}'
效果很好。
RFC 1750:https://tools.ietf.org/html/rfc1750。输出不统一,但其目标是接近。