私はキッド シスター暗号化関数を作成しています。OS 間で一貫した結果を生成する PRNG が必要です (ハードウェアやシステム レベルのソフトウェアを利用した浮動小数点演算は必要ありません)。PRNG の期間が 2 30よりも長いため、必要ではありません。
現在、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 のモジュールを知っていますか?
- そうでない場合、私のニーズに合ったアルゴリズムを知っていますか?