这不是功课.我想在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的问题(因此硬件熵密钥).
还有其他想法吗?谢谢.
以下是如何从开发中读取并从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位整数,这是非常大的,所以序列末尾奇数的额外数字应该没有多大区别......
| 归档时间: |
|
| 查看次数: |
1797 次 |
| 最近记录: |