在 Perl 中有很多方法可以创建安全的随机数。大多数这些方法都涉及一个或多个 Perl 模块。许多这些 Perl 模块需要更多的 Perl 模块作为依赖项。
由于我想保持轻量级并减少所需的依赖项,因此我决定使用Math::Random::ISAAC
,并自己从/dev/urandom
.
那么,在不使用其他模块的情况下,在 Perl 中读取 128 位(我想这是一个很好的数量)数据/dev/urandom
,然后将其传递给的推荐方法是ISAAC
什么?
我不知道正确的阅读和格式化方式是什么,这是我将把种子传递给的子副本:
sub new {
my ($class, @seed) = @_;
my $seedsize = scalar(@seed);
my @mm;
$#mm = $#seed = 255; # predeclare arrays with 256 slots
# Zero-fill our seed data
for ($seedsize .. 255) {
$seed[$_] = 0;
}
my $self = {
randrsl => \@seed,
randcnt => 0,
randmem => \@mm,
randa => 0,
randb => 0,
randc => 0,
};
bless($self, $class);
$self->_randinit();
return $self;
}
我不是数组、标量、字节字符串等方面的专家;所以我真的不知道如何正确格式化urandom
数据@seed
。我确实认为 128 位有很多随机性,但我不知道如何确保所有的熵都变成ISAAC
,并防止它在此过程中被截断为 64 或 32 位。