Tôi đang viết một hàm kid sister encryption và tôi cần một PRNG tạo ra kết quả nhất quán trên các hệ điều hành (vì vậy không có toán học dấu chấm động, tận dụng phần cứng hoặc phần mềm hệ thống). Nó sẽ là tốt đẹp, nhưng không cần thiết, cho PRNG có một khoảng thời gian dài hơn 2 .Tôi cần một bộ tạo số giả ngẫu nhiên, phù hợp
Tôi hiện đang sử dụng 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;
Nhưng tôi lo lắng vì tôi không thực sự hiểu thế nào nó hoạt động. Ví dụ, nguồn gốc không có khả năng thiết lập hạt giống, vì vậy tôi đã thêm vào, nhưng tôi không biết liệu tôi có chọn đúng biến cho hạt giống hay không.
Vì vậy, tất cả điều đó nắm để
- Bạn có biết của một module trên CPAN phù hợp với nhu cầu của tôi?
- Nếu không, bạn có biết thuật toán nào phù hợp với nhu cầu của tôi không?
Nhưng nó có nhất quán không? Nếu tôi gieo nó với 5 nó sẽ tạo ra kết quả tương tự trên Linux, BSD, OS X, Win32, v.v. –
Nếu bạn đọc liên kết Wikipedia, bạn sẽ nhận thấy điều đầu tiên mà nó nói trong "Ứng dụng" là nó không phù hợp cho mật mã. – cjm
@cjm: nếu bạn đọc liên kết mã hóa em gái đó, bạn sẽ nhận thấy điều đó có thể không liên quan. – ysth