2013-07-16 156 views
1

我需要從一組字符中選擇隨機字符,比如0..9,az,Az等。爲此,我需要生成0到n之間的隨機整數是不同字符的數量)使用Perl腳本。但Perl rand函數不具有加密安全性。什麼是生成隨機數的最佳方式。在perl中生成加密安全的隨機數/字符串

現在我正在使用我自己的算法,我隨機選擇了字符串。然後我使用rand生成一個隨機數。使用我在隨機數字集合中選擇一個十進制數字,然後將它與隨機數字相乘。無論我得到的是所選字符的索引。

my @chars = ('a'..'d','#','N'..'Z','$','e'..'f','0'..'9'); 
my @random_numbers_list = ('1.0145','1.3464','1.8453','1.5145','1.9994'); 
my $random_string; 
my $random_number; 
my $chars_length = scalar @chars; 
foreach (1 .. $length) { 
      $random_number = (rand $chars_length)*$random_numbers_list[rand(5)]; 
      $random_number = ($random_number>$chars_length)?$random_number-$chars_length:$random_number; 
      $random_string .= $chars[$random_number]; 
} 
print $random_string; 

我知道我不斷增加random_numbers_list的大小,它會越來越安全。但我仍然不確定這是實現這一目標的最佳方式。

請讓我知道生成密碼安全的隨機字符串/數字的最佳方法。

由於

+0

你應該嘗試通過節省大家的時間[**網上搜索**](http://www.google .com/search?q = perl + cryptographic + random + number)。 –

+0

相關:[什麼是perl的線程安全隨機數生成器?](http://stackoverflow.com/questions/15574374/what-is-a-thread-safe-random-number-generator-for-perl) ,它警告使用Windows內置的'rand'並推薦[Math :: Random :: MT](http://p3rl.org/Math::Random::MT)。 – daxim

回答

6

Math::Random::Secure是一種解決方案(利用/dev/urandom在Linux)。

Crypt::Random可能是一個更好的解決方案(利用/dev/random,因此,可能會阻止)。

-3

在另一方面,你必須在CPAN Perl模塊,讓您funcionallity,像String::Random

+1

我沒有看到任何有關加密安全的內容 - 這是OP的主要關注點。 –

+0

我說這是一個選擇;你的回答是好的,但我尋找另一種方法來解決問題 –

+1

但我不認爲你是解決問題的有效方法。 OP *明確*要求密碼安全的RNG。您的解決方案*不符合該標準。所以這是一個無效的答案。 –