@Polo l'asticot, ola
Sur ton site https://aidelinux.toile-libre.org/doku.php/linux/securite/supergenpass, j'ai lu avec beaucoup d'intérêt l'article relatif à SuperGenPass.
Belle trouvaille.
J'ai dû l'adapter à la marge pour qu'il fonctionnât avec Toutou Linux Slaxen.
En fait, ´xlcip -r --clipboard´ doit être réduit à sa plus simple expression, soir xclip.
Dans ton article, tu évoques la ligne 31 à adapter pour ne pas devoir resaisir son mdp.
Mais la ligne 31 est oqp par un ´continue´.
Ne serait-ce pas la ligne 21 qu'il faille adapter, mon camarade ?
En fait, ce qu'il faut garder au chaud, outre le mdp maître, cher maître, ce sont les URL, éventuellement suivies des paramètres individuels, et l'identifiant de connexion.
Les mots de passe générés sont au format alphanumérique (minus & majus).
Essayé également l'outil au format .html qui fonctionne tout seu comme un grand.
Tu peux considérer ton article comme relu.
Merci.
Fraterniteur
Aloha, maître Rantanplan
En fait, je ne voyais pas l'article comme cela, mais c'est très gentil de ta part.
Pour le paragraphe sans entrée du mot de passe, je me suis mélangé les pinceaux en prenant la ligne de l'article dans mon éditeur de texte au lieu de la ligne du script (que je ne vois pas quand j'écris).
Il s'agit de remplacer l'entrée du mot de passe par le mot de passe en dur et c'est donc à la ligne 20 que cela se passe (pas tombé loin !). C'est corrigé. Merci.
Par contre, certains services demandent en plus des chiffres et des lettres, des caractères spéciaux. Il faudrait enregistrer l'URL du service, l'identifiant et un élément auxiliaire pour ces sites sadiques (ex : µß). Cela pourrait être une simple liste sans protections puisqu'elle ne contient pas les mots de passe. Pour l'instant, je ne vois pas comment faire, mais un programme avec le tout serait idéal. On va attendre que la température descende pour faire chauffer les neurones…
Àpluch
PS : le site sur Toile-libre est d'une lenteur désespérante. Je ne suis pas sûr de prendre un abonnement chez eux. Mais il est accessible pour l'instant. Je cherche autre chose.
PS++ : C'est même pas la chaleur, c'est la vieillesse : j'ai oublié de demander. Si une âme charitable pouvait m'expliquer à quoi sert, dans la version HTML, le mot de passe secondaire et si c'est vraiment utile, je m'endormirai moins bête !
@Polo l’asticot
salut amiko,
Après des tests académiques plus poussés :)), il ressort que la version html et cli fonctionnent différemment.
En html, si on inscrit comme URL http|s://....., seule la partie relative au domaine est retenue, comme par exemple toto.org.
Toujours dans la version html, lorsqu'on active la roue crantée, un champs "Mot de passe secondaire" s'affiche.
Si on y saisit des caractères, le mot de passe sera différent de celui calculé lorsque le champs "Mot de passe secondaire" reste vide.
En ligne de commande ou
CLI, la chaîne "https://toto.org" est conservée pour le calcul du mot de passe.
Si le mot de passe est complété du mot de passe secondaire de cette manière "Mot-de-passe_principalMot-de-passe_secondaire" et que URL a été saisie de cette manière "toto.org", on obtient le même mot de passe que celui calculée par la version html.
Résultats des tests
HTML| Mot de passe principal | Mot de passe secondaire | URL saisie | Mot de passe obtenu |
| toto | momo | https://toto/org | qqkLPSmW8l |
| toto | | https://toto/org | hNu1Erd42J |
CLI| Mot de passe principal | URL saisie | Mot de passe obtenu |
| totomomo | toto.org | qqkLPSmW8l |
| toto | https://toto.org | k15qnLGd9m |
| toto | toto.org | hNu1Erd42J |
Oui, c'est dommage que le mot de passe calculé n'inclut pas de caractères spéciaux.
Il faudrait prévoir un sel paramétrable par l'utilisateur afin qu'il définisse lui-même les deux caractères spéciaux (1 paramètre) à inclure dans le mot de passe et leur position (2 paramètres), soit 3 paramètres de plus.
Mais peut-être y a-t-il plus simple.
Les températures baissent, enfin.
"Vieillir, ah vieillir" disait Brel.
Atchao et "Ah que coucou !"
@Rantanplan
… soit trois paramètres de plus.
Je comprends l'intérêt des paramètres. Je trouve cela très compliqué à mettre en œuvre. Mon idée était de faire un script où on choisit son URL dans une liste. On entre son mot de passe général et cela affiche l'identifiant et le mot de passe. URL et l'identifiant sont dans le même programme. Il n'y a qu'un seul fichier. Donc :
Question bête.
Si j'ai un champ libre, une entrée (pouvant être vide) ou je mets ce que je veux.
J'ajoute cela
à la fin du mot de passe calculé par SGP. J'enregistre une liste avec sur chaque ligne URL, identifiant, entrée.
C'est moins costaud qu'avec les trois paramètres mais on peut changer la longueur du mot de passe à 12 ou 15.
Ex :
URL toto.org MDPgénéral totomomo Entrée øµ MDPobtenu
qqkLPSmW8løµ
Cela te semble idiot ?
Le problème des trois paramètres, c'est que je peux bien tomber dans le futur sur un site qui demande 4 caractères spéciaux. Lui, il faudrait 5 paramètres. À la création du compte, cela va prendre le quart d'heure pour entrer les composantes du mot de passe. Et le calcul pour le retrouver, je ne vois pas comment faire si tout est variable.
L'asticot dans son coing
Et puis, il faut éviter le salage. Tout ce sel, c'est très mauvais pour la santé.
@Polo l’asticot dans son coing,
c'est bon la gelée de coings...
Oui, j'imagine que l'intégration des paramètres doit être compliqué.
Ta solution est la moins pire, l'utilisateur décide des caractères spéciaux et s'il les met au début ou à la fin.
L'idéal serait que ces caractères spéciaux soient générés par le script.
Dans le fichier bash, à la ligne 27, retire la séquence ´ | base 64´.
Les mots de passe sont générés avec des caractères spéciaux, y compris l'espace ce qui pourrait poser problème. Mais pas sûr que ce soit la solution.
Que fait ´tr +/= 98A´
À ton expertise, je soumets...
Bon kawa et bon tabac dans la tabatière.
Vive Flipper le dauphin.
Hola Rantanplan,
Pas beaucoup avancé. Mais comme il est impoli de ne pas répondre…
En enlevant base64 cela donne plusieurs centaines d'erreurs sans faire de mot de passe.
Extrait :
./supergenpass.sh: ligne 26: avertissement :substitution de commande: octet nul ignoré en entrée
./supergenpass.sh: ligne 26: avertissement :substitution de commande: octet nul ignoré en entrée
./supergenpass.sh: ligne 26: avertissement :substitution de commande: octet nul ignoré en entrée
grep: (entrée standard) : fichiers binaires correspondent
./supergenpass.sh: ligne 26: avertissement :substitution de commande: octet nul ignoré en entrée
grep: (entrée standard) : fichiers binaires correspondent
grep: (entrée standard) : fichiers binaires correspondent
grep: (entrée standard) : fichiers binaires correspondent
= grep, pas content ! Et fait sa feignasse.
tr +/= 89A
Par exemple, avec le pipe, j'obtiens :
aX3oNM08rI
Sans, j'obtiens :
o2cE1Qf05t
Je ne comprends pas trop l'utilité.
Cela fait normalement une substitution caractère par caractère.
En ligne de commande, cela transforme bien le + en 9, le / en 8 et le = en A
Je crois que je me suis un peu emballé sur ce programme. Il n'est pas facile à manipuler. Je vais essayer plutôt de l'incorporer dans un ensemble plus grand.
Si tu dois faire un test, dans plusieurs semaines, tu préfèrerais yad ou gtkdialog ? (J'ai regardé xmessage, mais il ne permet pas de faire ce dont j'ai envie.)
Vous le verrez peut-être, vous la verrez parfois, en pluie et en chagrin
Traverser le présent en s’excusant déjà de n’être pas plus loin
Et, le temps d’un sanglot, oublier toute une heure l'odeur de leur coing…'
(Je sais, c'est truqué.)
Fraternité et dodo !
Bonan postmezatagon Polo,
Pour tr +/= 98A, je comprends la même chose que toi.
Ton idée d'ajouter au début ou en fin de mdp, deux caractères spéciaux définis par l'utilisateur est plutôt bonne.
J'ai essayé des tas de trucs, mais sans résultat probant.
À suivre mon bon.
Tic-tac, tic-tac...
Mon Polo,
après tr +/= essayes :
| sed -e 's/\(^.\)/µ\1/g' -e 's/\(.$\)/\1þ/g'
J'ai testé ça :
# echo toto | sed -e 's/\(^.\)/µ\1/g' -e 's/\(.$\)/\1þ/g'
µtotoþ
Qu'en penses-tu ?
Rantanplan
Ton idée fonctionne bien. Je n'aime pas le fait que les caractères spéciaux ne changent pas. Si on tombe sur deux mots de passe, cela permet d'enlever deux caractères sur le décryptage.
En cherchant un peu, j'ai lu qu'une longueur de 16 caractères était préférable. Puisqu'il n'est pas possible de conserver la compatibilité, j'ai décidé de barboter joyeusement dans le code.
#!/usr/bin/env bash
#Code dérivé de celui de Mihail Milushev (lanzz : https://github.com/lanzz/bash-supergenpass/blob/master/supergenpass.sh) sous licence MIT
################################################################################
default_password_length="16"
### 16 par défault. Peut être remplacé au cas par cas en ajoutant la longueur
### personnalisée comme deuxième argument après le domaine lors du lancement du script.
default_hashing_algorithm="md5"
### "md5" par défaut. Une valeur alternative serait « sha512 » qui peut être donnée
### au cas par cas comme troisième argument.
################################################################################
domain=$(echo $1 | tr A-Z a-z)
length=${2:-$default_password_length}
length=$(($length - 4))
hashing_algorithm=${3:-$default_hashing_algorithm}
echo -n 'Mot de passe : '; master_password="&'èàarupä‘üö"
hash=$master_password:$domain
i=0
while true
do
hash=$(echo -n "$hash" | openssl "$hashing_algorithm" -binary | base64 | tr -d '\n' | tr +/= 98A)
i=$(($i + 1))
if [ $i -lt 10 ]
then
continue
fi
valid=$(echo "${hash:0:$length}" | grep -E '^[[:lower:]]' | grep -E '.[[:upper:]]' | grep -E '.[[:digit:]]')
if [ "$valid" != "" ]
then
break
fi
done
# Sur les caractères 13 à 16, je remplace les lettres par des caractères spèciaux
plus=$(echo ${hash:$length:4} | tr '[:lower:] [:upper:]' '&(_)+#{[|]}/?/§!:^&![+§)#]&(_)+#{[|]}??/§!:^&![+§)#]')
if [ -n "$WAYLAND_DISPLAY" ] && command -v wl-copy >/dev/null; then
echo -n ${plus:0:2}${hash:0:$length}${plus:2:2} | wl-copy
echo "Mot de passe copié dans le presse-papiers Wayland"
elif [ -n "$DISPLAY" ] && command -v xclip >/dev/null; then
echo ${plus:0:2}${hash:0:$length}${plus:2:2} | xclip -r -selection "clipboard"
echo "le mot de passe est copié dans le presse-papiers X"
echo ${plus:0:2}${hash:0:$length}${plus:2:2}
else
echo ${plus:0:2}${hash:0:$length}${plus:2:2}
fi
Le mot de passe principal est mis en dur pour aller plus vite et cela affiche directement le mot de passe obtenu.
Je fais une substitution sur quatre lettres car avec deux, si plusieurs chiffres se suivent, il n'y a plus de caractères spéciaux. J'en mets deux devant et deux derrière.
Le but de l'ensemble, c'est d'obtenir des caractères spéciaux générés par le programme et qui changent avec toutes les entrées de manière assez complexe pour sembler aléatoire.
Qu'en penses-tu ?
Si tu critiques, je me fous dans le canal ! Je plaisante. (Mais tu es prévenu.)
¡Que pases un buen final de día, tanto tú como toda tu familia!
L'asticot
PS : Moi ce que je préfère, c'est l'odeur.
Polo le magicien,
Fabuleux et même prodigieux.
Je crois comprendre que lorsque un mot de passe de 16 caractères est souhaité, la longueur serait ramenée à 12 ´length=$(($length - 4))´. Mais je n'ai peut-être pas compris la syntaxe.
Ce qui m'épate, c'est que les caractères spéciaux pour un domaine et un mot de passe donnés ne varient pas.
Je présume que l'astuce est dans :
plus=$(echo ${hash:$length:4} | tr '[:lower:] [:upper:]' '&(_)+#{[|]}/?/§!:^&![+§)#]&(_)+#{[|]}??/§!:^&![+§)#]')Je crois deviner que les minuscules sont remplacées par un des caractères
+#{[|]}/?/§!:^&![+§)#]et les majuscules par un de ceux-là :
+#{[|]}??/§!:^&![+§)#]Mais, probablement, me trompé-je.
Bref, bravo l'asticot.
@Rantanplan
C'est tout à fait cela. Sur 16 au départ, il y a 12 caractères alphanumériques. Pour les 4 caractères suivants, les lettres sont remplacées par des caractères spéciaux et on en place 2 devant et 2 derrière.
J'ai remarqué sur plusieurs tirages, deux chiffres qui se suivaient. Pour que mon système ne fonctionne pas et qu'il n'y ait pas de caractères spéciaux, il faudrait qu'il y ait quatre chiffres qui se suivent à partir du treizième rang. J'espère que la probabilité est très faible, mais je n'ai pas passé la journée à faire des tirages en changeant URL et mot de passe.
Si tu as une idée plus lumineuse, je suis preneur !
Je cherche de mon côté une meilleure technique.
Bonan vesperon
Ola Rantanplan et l'univers,
J'ai cherché désespérément à différencier chiffres, minuscules et majuscules dans le mot de passe généré. Les comparaisons directes en Bash ne fonctionnaient pas même quand elles étaient préconisées par certains sites (créations par IA ???, IA de m…). J'ai bien perdu mon temps là-dessus.
Je me suis souvenu du bon temps où je faisais de la programmation en Basic. (Il ne rigole pas le jeunot, s'il ne veut pas se prendre un coup de canne sur la tête !) Il y avait une fonction de conversion en code ASCII qui donnait de bons résultats. Je suis parti sur cette piste. Le programme est beaucoup plus lourd et codé à l'arrache mais cela fonctionne.
#!/usr/bin/env bash
#Code dérivé de celui de Mihail Milushev (lanzz : https://github.com/lanzz/bash-supergenpass/blob/master/supergenpass.sh) sous licence MIT
################################################################################
default_password_length="16"
### 16 par défault. Peut être remplacé au cas par cas en ajoutant la longueur
### personnalisée comme deuxième argument après le domaine lors du lancement du script.
default_hashing_algorithm="md5"
### "md5" par défaut. Une valeur alternative serait « sha512 » qui peut être donnée
### au cas par cas comme troisième argument.
################################################################################
domain=$(echo $1 | tr A-Z a-z)
length=${2:-$default_password_length}
hashing_algorithm=${3:-$default_hashing_algorithm}
mpd=""
chiffre=0
maj=0
min=0
cumul=0
master_password="&'èàarupä‘üö"
hash=$master_password:$domain
i=0
while true
do
hash=$(echo -n "$hash" | openssl "$hashing_algorithm" -binary | base64 | tr -d '\n' | tr +/= 98A)
i=$(($i + 1))
if [ $i -lt 10 ]
then
continue
fi
valid=$(echo "${hash:0:$length}" | grep -E '^[[:lower:]]' | grep -E '.[[:upper:]]' | grep -E '.[[:digit:]]')
if [ "$valid" != "" ]
then
break
fi
done
mdp=${hash:0:$length}
echo $mdp
i=0
while true
do
car=${mdp:$i:1} ; ascii=$(printf "%d" "'$car'")
if [ $ascii -lt 58 ] ; then
chiffre=$(($chiffre + 1))
if [ $chiffre -gt 3 ] ; then
car=$(echo $car | tr '[:digit:]' '&(_)+#]{|[')
mdp=${mdp:0:$i}$car${mdp:"(($i + 1))"}
cumul=$(($cumul + 1)) ; chiffre=0
fi
elif [ $ascii -lt 91 ] ; then
maj=$(($maj + 1))
if [ $maj -gt 2 ] ; then
car=$(echo $car | tr '[:upper:]' '&(_)+#{[|]}>?/<!:^&![+<)#]')
mdp=${mdp:0:$i}$car${mdp:"(($i + 1))"}
cumul=$(($cumul + 1)) ; maj=0
fi
else
min=$(($min + 1))
if [ $min -gt 1 ] ; then
car=$(echo $car | tr '[:lower:]' '&(_)+#{[|]}?>/<!:^&![+<)#]')
mdp=${mdp:0:$i}$car${mdp:"(($i + 1))"}
cumul=$(($cumul + 1)) ; min=0
fi
fi
if [ $cumul -gt 2 ] ; then break ; fi
i=$(($i + 1))
done
if [ -n "$WAYLAND_DISPLAY" ] && command -v wl-copy >/dev/null; then
echo -n $mdp | wl-copy
echo "Mot de passe copié dans le presse-papiers Wayland"
elif [ -n "$DISPLAY" ] && command -v xclip >/dev/null; then
echo $mdp | xclip -r -selection "clipboard"
echo $mdp
echo "Le mot de passe est copié dans le presse-papiers de X"
else
echo $mdp
fi
C'est toujours en développement. Le mot de passe général est toujours en dur dans le script et cela affiche le mot de passe généré sans caractères spéciaux puis en dessous, avec.
Petite explication :Le script compte les chiffres et remplace le quatrième par un caractère spécial.
Pour les majuscules, c'est la troisième qui est remplacée.
Avec les minuscules, c'est toutes les deux occurrences que le remplacement a lieu.
Pourquoi ? Parce que pourquoi pas.
Quand il y a eu trois remplacements, on s'arrête et on donne le résultat.
L'avantage, c'est que les caractères spéciaux apparaissent n'importe où, sans régularité. (J'ai réduit l'ensemble des caractères à ceux de code inférieur à 128, les autres provoquant un affichage incorrect avec des points d'interrogation.)
Si tu peux tester et faire un retour, quand tu as du temps.
¡Que la fuerza acompañe a España y a los españoles!
Polo,
chez moi, Toutou n'aime pas la ligne 70 et notamment "(($i + 1))".
En fait, c'est le caractère " qu'il pose problème.
Lorsque je lance le script après avoir retiré les " aux lignes 70, 63 et 56, j'obtiens :
root@pctoutou ~
# ./genmdp.sh
ybUTPjlHlf5l2LR1
xclip: -r: No such file or directory
y(UT!j?Hlf5l2LR1
Le mot de passe est copié dans le presse-papiers de X
Pas sûr que ce soit le bon résultat.
et avec :
# ./genmdp.sh https://augras.eu/puppy_forum
pXOT52Xon4O1NSUK
xclip: -r: No such file or directory
pXO!52X<n4O(NSUK
Le mot de passe est copié dans le presse-papiers de X
Dis-moi, si tu obtiens idem pareil également la même choz itou, stp.
Apluche dans le cognassier du coin d'ton coing :)
@Rantanplan
En enlevant les " des lignes susnommées, cela fonctionne toujours chez moi. Le code est donc compatible Bash 2013 ?
Dommage qu'on ne puisse pas s'enlever les guillemets et rajeunir de treize ans !
Nouvelle explication pour les étourdis qui n'ont pas tout enregistré. Pour le deuxième test du sieur Rantanplan :
pXOT → troisième majuscule dans la chaîne : on remplace le T par un caractère spécial.
pXO!
pXOT52Xo → deuxième minuscule dans la chaîne : on remplace le o par un caractère spécial.
pXO!52X<
pXOT52Xon4O1 → quatrième chiffre dans la chaîne : on remplace le 1 par un caractère spécial.
pXO!52X<n4O(
3 substitutions ont été faites : on garde la suite sans changements.
pXOT52Xon4O1NSUK
pXO!52X<n4O(NSUK
Cela m'étonne un peu, mais cela semble fonctionner du premier coup. J'obtiens exactement la même chose que toi pour les deux exemples. Avec les trois chaînes de caractères spéciaux tirées au hasard et un mot de passe général solide, cela devrait sérieusement compliquer la tâche d'un hackeur.
Merci à toi pour ces essais.
J'espère que ton coin de coing est aussi frais que mon coin de coing. Pas coin-coin parce que je me méfie des canards.
Polo l'asticot
Olà l'As Ticot,
merci pour tes explications pour les cancres : j'en avais besoin.
Alors donc youpi si ça fonctionne.
Peut-être faudrait-il une invite dans le cas où il n'y a pas au moins un paramètre.
Qu'en dis-tu ?
Je fais partie des distraits qui oublient vite.
Je vais faire un ch'ti artik pour annoncer la sortie du dernier antiX et mon avis de chien le plus bête de l'ouest (de la France).
À plus camarade du coing.
Ol'As,
ça pourrait ressembler à :
if [ $# -eq 0 ] ; then
echo -e "\vUsage :\vVous devez saisir un nom de domaine sous la forme :\v
http[s]://nom.de.domaine.abc[/complément]\n"
exit
fi
Ou autrement, ou différemment, ou pas la même chose...
Boivez mon brave !
Vu sur Mastodon : "Boire c'est anticap', ça fait uriner ! Et c'est pris sur le temps de travail !" :P ;D
Ciao
Ola Rantanplan !
Ola Sticot !
Je n'avais même pas pensé qu'en ne mettant pas de domaine, on obtenait un résultat !
Je teste toujours à fond, c'est ma nature.
Du coup, je me disais que j'allais faire comme anticapitalista, je dis que ce n'est pas un bogue : c'est une fonctionnalité.
Cela va se voir…
Bon, je mets ton test alors. Il est très bien.
Super !
Je n'ai pas essayé pour une interface en GTKDialog. Je teste des fonctions de la nouvelle antiX. Cela ne marche pas trop et je ne comprends pas ce que je dois faire. C'est dommage qu'il n'y ait pas de documentation, même en anglais. Cela aiderait.
Je peux faire quelque chose ?
C'est gentil, mais c'est en 64 bits. Et installé en dur.
Ah, alors je n'y touche pas.
Fraternité, le Toutou
Polo l'asticot
Buenos dias mucha-chaud,
Je l'ai aussi intégré dans la version que j'ai conservée.
D'ailleurs, l'usage peut-être complété comme suit :
if [ $# -eq 0 ] ; then
echo -e "\vUsage :\vVous devez saisir un nom de domaine sous la forme :\v
http[s]://nom.de.domaine.abc[/complément] [longueur_du_mot_de_passe] [md5 | sha512]\n"
exit
fi
Là, on devient presque pro de chez pro :-).
Penses à picoler de la flotte, caramba !