Struppi: Brauche einen eindeutigen und zufälligen String...

Beitrag lesen

Hallo,

siehe Betreff. Mein Versuch mit

=try...
my @sessions;
for (1..60){
 my $session = time.$$;
 my $salt = int rand 98 + 1;
 $session = crypt($salt,$session);
 push @sessions, $session;
}

print sort join "\n", @sessions, "\n";
=cut

zeigt jedoch dass es doppelte IDs gibt. Hat jemand einen besseren Vorschlag?

Einerseits weiß ich nicht ob dein salt nicht schlecht gewählt ist, da es ja ein String sein sollte. anderseits ist time natürlich zu lahm, aber anderseits in der Praxis sollte es ausreichen, wenn nicht probier das mal (dauert aber wesentlich länger):

use strict;
use Time::HiRes qw/gettimeofday/;

my @sessions;
my $salt = 'XX';

for (1..600)
{
 my $session = (gettimeofday)[1];
 my $salt = getSalt();
 $session = crypt($salt,$session);
 push @sessions, $session;
}

my %keys = map{ $_, 1} @sessions;

print scalar keys %keys, "\n"; # soll: 600 ist: 591

sub getSalt
{
    my $anzahl = shift || 2;
    return join '', map { (0..9, 'A'..'Z', 'a'..'z')[rand 64]; } (0..$anzahl);
}

Struppi.