Я пишу функцию kid sister encryption, и мне нужен PRNG, который дает согласованные результаты по всем операционным системам (поэтому нет математики с плавающей запятой, используя аппаратное обеспечение или программное обеспечение на уровне системы). Было бы неплохо, но не обязательно, поскольку PRNG имел период более 2 .Мне нужен портативный, последовательный генератор псевдослучайных чисел
Я в настоящее время использую 32 бит Xorshift:
#!/usr/bin/perl
use strict;
use warnings;
{
use integer; #use integer math
my $x = 123456789;
my $y = 362436069;
my $w = 88675123;
my $z = 521288629;
sub set_random_seed {
$w = shift;
}
sub random {
my $t = $x^($x << 11);
$x = $y;
$y = $z;
$z = $w;
my $rand = $w = ($w^($w >> 19))^($t^($t >> 8));
return $rand % 256; #scale it back to a byte at a time
}
}
set_random_seed(5);
print map { random(), "\n" } 1 .. 10;
Но я волнуюсь, потому что я не очень понимаю, как это работает. Например, исходный источник не имел возможности устанавливать семя, поэтому я добавил его, но я не знаю, выбрал ли я правильную переменную для семени.
Таким образом, все, что сводится к
- Вы знаете модуль на CPAN, который соответствует моим потребностям?
- Если нет, знаете ли вы алгоритм, который соответствует моим потребностям?
Но неужели это согласовано? Если я засеваю его 5, он даст те же результаты в Linux, BSD, OS X, Win32 и т. Д. –
Если вы прочтете эту ссылку в Википедии, вы заметите, что первое, что говорится в «Заявке», заключается в том, что она не подходит для криптографии. – cjm
@cjm: если вы прочтете эту шифрующую ссылку на сестру ребенка, вы заметите, что это, вероятно, не имеет значения. – ysth