Table des matières
Crypt
Liens:
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: # $<format>$<salt>$<hash> # $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 => '<COMPTE>', 'password' => '<MOT_DE_PASSE>') ) { 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
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!).
|
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"; } };