Sto scrivendo una funzione kid sister encryption e ho bisogno di un PRNG che produca risultati coerenti su tutti i sistemi operativi (quindi nessuna matematica in virgola mobile, sfruttando l'hardware o software di sistema). Sarebbe bello, ma non necessario, perché il PRNG aveva un periodo più lungo di 2 .Ho bisogno di un generatore di numeri pseudocasuale portatile, coerente
Attualmente sto usando un 32 bit 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;
Ma io sono preoccupato perché io non capisco come funziona. Ad esempio, la fonte originale non aveva la possibilità di impostare il seme, quindi ne ho aggiunto uno, ma non so se ho scelto la variabile corretta per il seme.
Quindi, tutto questo si riduce a
- Sapete di un modulo su CPAN che si adatta alle mie esigenze?
- In caso contrario, conosci un algoritmo che si adatta alle mie esigenze?
Ma è coerente? Se lo seminerò con 5, produrrebbe gli stessi risultati su Linux, BSD, OS X, Win32, ecc. –
Se leggi il link di Wikipedia, noterai che la prima cosa che dice in "Applicazione" è che non è adatto per la crittografia. – cjm
@cjm: se leggi il link di crittografia di kid kid, noterai che probabilmente non è rilevante. – ysth