从/ dev/random生成随机整数

Fra*_*fka 5 random r

这不是功课.我想在R中从/ dev/random生成一个随机整数序列(0:9之间的50位数字).我有一个硬件熵密钥.

我找到了两个"想法",我无法向我提供我所追求的数字:

1)RDieHarder.似乎允许访问/ dev/random,但我不能让它生成我需要的整数序列.例如

>library(RDieHarder)  
>x  <-dieharder(rng="/dev/urandom", psample=50) #urandom used for example
Run Code Online (Sandbox Code Playgroud)

2)精度包可以提供真正的随机数,但似乎已过时,我无法看到如何从/ dev/random进行排序.例如

>library(accuracy)
>x=runifT(50)
Run Code Online (Sandbox Code Playgroud)

是的我已阅读Knuth等并了解TRNG的问题(因此硬件熵密钥).

还有其他想法吗?谢谢.

Spa*_*man 5

以下是如何从开发中读取并从a到b包含n个数字:

readRandom <- function(n,a,b,dev="/dev/urandom"){
  size = b-a + 1
  rng = file(dev,"rb") # open connection
  nums = readBin(rng,what="integer",n=n) # read some 8-byte integers 
  close(rng) # close the connection
  return( a + nums %% size ) # reduce range and shift
}
Run Code Online (Sandbox Code Playgroud)

如果我从/ dev/random读取它会阻塞,因为我的系统耗尽了熵,但是你的密钥应该忙于将熵输入系统,我想......

"边缘"效应问题如下.假设我生成从0到10的随机整数,但是你想要0到6之间的整数.那么X %% 7会生成两倍于0,1,2,3的值,因为映射是这样的:

> (0:10) %% 7
 [1] 0 1 2 3 4 5 6 0 1 2 3
Run Code Online (Sandbox Code Playgroud)

现在,readBin正在获得8位整数,这是非常大的,所以序列末尾奇数的额外数字应该没有多大区别......