Bonjour,
Ici, le but est d'avoir par exemple 10 millions de mots de passe à crypter avec openssl dont la commande d'exemple pour un seul mot de passe serait:
Pour les 10 millions de mots de passe, la méthode "naïve" serait par exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 echo -n mot_de_passe | openssl enc -aes128 -a -iv d80667e915403ebf5abc787971e6edcd -K 9c2751a06ed8802cb11700498f09d5bd E01+Iy+idNeTbXNTyMmcSw==
ici, cela fonctionne, mais voyons la durée pour par exemple 1000 mots de passe:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 while read mdp do echo -n $mdp | openssl enc -aes128 -a -iv d80667e915403ebf5abc787971e6edcd -K 9c2751a06ed8802cb11700498f09d5bd done <mdp.txt >mdp.enc1
On est environ à 9 secondes (je suis gentil) pour 1000 mots de passe, comme ce genre d'algo est linéaire, on peut extrapoler, et dire qu'il faudrait 90 secondes pour 10.000, 900 secondes pour 100.000, 9000 secondes pour 1.000.000 et 90.000 secondes (25 heures) pour nos 10 millions.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 $ wc -l mdp.txt 1000 mdp.txt $ time while read mdp; do echo -n $mdp | openssl enc -aes128 -a -iv d80667e915403ebf5abc787971e6edcd -K 9c2751a06ed8802cb11700498f09d5bd; done <mdp.txt >mdp.enc1 real 0m9.924s user 0m4.356s sys 0m1.172s
Bon, là, on est sur des temps un peu long, il serait bien de pouvoir réduire ce temps...
Personnellement, après quelques recherches infructueuse sur le net, j'ai utilisé une autre forme d'écriture d'openssl qui m'a permit de gagner du temps.
Le code est le suivant:
Ce qui donne pour 1000 mot de passe à crypter:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 mkfifo in0 in1 out0 out1 rm -f mdp.enc openssl < <( j=1 while read mdp do x=$(( j++ % 2 )) echo "enc -aes128 -a -iv d80667e915403ebf5abc787971e6edcd -K 9c2751a06ed8802cb11700498f09d5bd -in in$x -out out$x" printf "%s" "$mdp" >in$x read res <out$x echo $res >>mdp.enc done <mdp.txt ) >/dev/null rm -f in0 in1 out0 out1
Comme on peut le voir, si on extrapole, on passe de 90.000 secondes (25 heures) à 5000 secondes ( ~ 1 heure 30 minutes).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 time { mkfifo in0 in1 out0 out1 ; rm -f mdp.enc ; openssl < <(j=1;while read mdp; do x=$(( j++ % 2 )); echo "enc -aes128 -a -iv d80667e915403ebf5abc787971e6edcd -K 9c2751a06ed8802cb11700498f09d5bd -in in$x -out out$x" ; printf "%s" "$mdp" >in$x ; read res <out$x ; echo $res >>mdp.enc ; done <mdp.txt ) >/dev/null ; rm -f in0 in1 out0 out1 ; } real 0m0.485s user 0m0.064s sys 0m0.068s
Ce gain n'est dû qu'a une chose, la version naïve relance la commande openssl autant de fois qu'il y a de mots de passe à traiter tandis que la deuxième version ne lance qu'une seule fois openssl et lui dit de crypter autant de fois qu'il y a de mots de passe à traiter.
Partager