====== Crypt ====== Liens: *http://www.jeteye.com/jetpak/e251d8b0-3b33-1029-86c1-00304880af2f/ *http://search.cpan.org/~chansen/Authen-Simple-0.4/lib/Authen/Simple/Password.pm *http://search.cpan.org/~mvorl/Crypt-UnixCrypt-1.0/UnixCrypt.pm But: comparer et construire des clés "crypt"... Voila: #!/usr/bin/perl -w use strict; use warnings; { # From package: libauthen-simple-passwd-perl # use Authen::Simple::Password; # Où: # password = mot de passe saisie (en clair) # encrypted = le hash recupéré dans une base (ou fichier shadow ...) # Exemple: # encrypted format: # $$$ # $1$12345678$1234567890123456789012 # ou $6$12345678$xxxxxxxxxxxxxxx... sub check_password { my ( $password , $encrypted ) = @_; return Authen::Simple::Password->check($password,$encrypted); } } # Créer de la poussiere # 8 caracteres aléatoires sub crypt_salt { my $salt = `( date +%s%N ; ps aux ) | md5sum | openssl base64`; return substr( $salt, 0, 8 ); } { # From package: libcrypt-unixcrypt-perl # use Crypt::UnixCrypt; sub crypt_password { my ( $p , $s ) = @_; if ( !defined( $s ) ) { # Créer la poussiere $s = '$6$' . crypt_salt(); } return crypt($p,$s); } } # -------------------------------------- # Chiffrement crypt : $1$salt45678 # Chiffrement sha512 : $6$salt45678 (par defaut) # # le "salt" est créé de façon pseudo aléatoire. # -------------------------------------- { # ----------------------------- # Coder un mot de passe # ----------------------------- my $c_password = 'M0t2P4ss3'; my $e_password = crypt_password( $c_password ); print "Mot de passe en clair: $c_password\n"; print "Devient chiffré en sha512: $e_password\n"; # ---------------------------- # Vérifier mot de passe # ---------------------------- print "Vérification du mot de passe : " , check_password( $c_password, $e_password ) ? 'OK':'**Erreur**' , "\n" ; # ---------------------------- } Test: ./cryptdemo.pl Mot de passe en clair: M0t2P4ss3 Devient chiffré en sha512: $6$OGViYWMx$M8GagcogWG18BoF7qVpgczE9ArxrFQk5YcAnqbiBAuWni37MVYG.GDT57Isy.3Z3qTVFCMn2UbB8nFLKrQA/n1 Vérification du mot de passe : OK ====== Random Quantum ====== ===== Install ===== Une vraie source aléatoire en ligne: http://jve.linuxwall.info/blog/index.php?post/2011/03/04/Quantum-Random-Bit-Generator-Service Créer un compte par là: http://random.irb.hr/ Récupérer les sources perl d'un module par là: http://search.cpan.org/~egor/Random-Quantum-0.04/ Pré-requis: # aptitude install libmoose-perl $ perl Makefile.PL $ make $ make test # make install Installing /usr/local/share/perl/5.10.0/Random/Quantum.pm Installing /usr/local/man/man3/Random::Quantum.3pm Writing /usr/local/lib/perl/5.10.0/auto/Random/Quantum/.packlist Appending installation info to /usr/local/lib/perl/5.10.0/perllocal.pod ===== Test ===== Petit test: #!/usr/bin/perl -w use strict; use warnings; use Random::Quantum(); { if ( my $cl = new Random::Quantum(user => '', 'password' => '') ) { print $cl->int1 , "\n"; print $cl->int1 , "\n"; print $cl->int4 , "\n"; print sprintf("%08X",$cl->int4) , "\n"; my $h = unpack( "H*", $cl->chunk(18) ); print "At last: $h\n"; } } Exemple: $ ./test.pl 196 222 3806413886 2591528E At last: 508757233b068245788774a4c94cfcdc5b74 Ca "lag" un peu... un problème de DNS ? ===== pwgen ===== ====== Ftp SSL ====== Installer d'abord le package 'ssleay': # apt-get install libnet-ssleay-perl Et puis enfin: # cpan -i IO::Socket::SSL # cpan -i Net::FTPSSL Parce que 'cpan' ne peut pas installer le module 'ssleay'. ====== Tips ====== ===== DateTime ===== Des dates a comparer... mais **''localtime''** et **''time''** c'est vraiment trop pourri... Il faut utiliser le formidable module **''DateTime''** . Liens *http://search.cpan.org/~drolsky/DateTime-0.53/lib/DateTime.pm *http://datetime.perl.org/?FAQ ==== module ==== On peut l'installer comme cela: # aptitude install libdatetime-perl ==== basic ==== #!/usr/bin/perl -w use strict; use warnings; use DateTime; { my $dt_now = DateTime->now(); my $dt_loin = DateTime->new( year => 2009, month => 12, day => 1 ); my $nbdays = $dt_loin->delta_days( $dt_now )->delta_days; print "jours: ", $nbdays, "\n"; } Où: * **''$dt_now''** , c'est la DateTime (dt) de maintenant * **''$dt_loin''** , c'est une date composé, loin dans le temps. Attention: faire un calcul (soustraction pour exemple), c'est créé un objet "duréé" (duration) ! \\ Donc: * **''$dt_now-$dt_loin''** donne une "duration". * **''$dt_loin->delta_days( $dt_now )''** donne une "duration" aussi. Pour avoir le nombre de jours de "duration" (toujours par exemple), il faut appeler la méthode **''delta_days''** (sans paramètre!). | :!: mais il faut l'appeler **correctement** , chose loin d'être evidente ! | Et voila le résulta: 23 Oui, on est la veille de Noël ! | :!: | ''( $dt_now - $dt_loin )->delta_days'' , contre toutes évidences, ne renvoit pas le nombre de jours entre 2 dates ! \\ Ca renvoi le nombre de jours entre 2 jours, sans tenir compte du mois ou de l'année... | ==== Nombre de secondes... ==== my $dt_now = DateTime->now(); my $dt_loin = DateTime->new( year => 2009, month => 12, day => 1 ); my $nbsec = $dt_now->subtract_datetime_absolute( $dt_loin ) -> delta_seconds; print "secondes: ", $nbsec , "\n"; print "jours: ", int($nbsec/(24*3600)) , "\n"; Resultat: secondes: 3775448 jours: 43 On peut aussi créer 2 dates avec un écart de 100 jours, comme cela: my $dt_end = DateTime->now(); my $dt_start = $dt_end - DateTime::Duration->new( days => 100 ); ===== en bref ===== ==== do ==== Lien: http://www.tinybox.net/astuces/programmation/perl/love-love-my-do On peut faire: my $var = do { 34 }; Mais aussi: my $var = do { print "bonjour"; if ( defined($ARGV[0]) ) { $ARGV[0]; } else { "rien de rien"; } };