Super, merci
Je suis d'accord avec le point qu'une phrase avec des "séparateurs" c'est bien pour s'en souvenir, mais rendu la, pas besoin d'un générateur de mot de passe pour séparer une phrase de 4 mots avec des %...
J'aime%0les%1Patates%2.
Une générateur "classique" avec beaucoup d'options permet de générer des séquences dur a se remémorer, oui, mais permet d'en générer selon des templates précis et des options de génération (ou encore des modes "prononçables"). Si l'algorithme est complet, et offres beaucoup d'options (je ne parle pas de mon générateur, puisque je l'ai fait vite sans analyse poussée), plus il est intéressant et utile de générer un mot de passe avec un générateur.
C'est certain qu'on peu tapper : diahjdaodhnefdJCNASC&ycASHCY&?AS&CH sur le clavier random, mais cela ne permet pas de reproduire exactement,à volonté et a une vitesse très rapide un template défini pour choisir lequel on veut utiliser parmis tous ceux générés.
Idée de concours sympa, je porte ma contribution en proposant un générateur codé dans un langage moins usité pour ce genre de choses : (La)TeX. L'avantage est qu'on sera directement dans environnement idéal pour faire un publipostage avec une qualité typographique irréprochable.
Pour la compilation, si vous n'avez pas de distribution LaTeX, vous pouvez utiliser un éditeur en ligne comme https://www.writelatex.com et copier le code ci-dessous.
L'extension lcg sert uniquement de générateur de nombres aléatoires.
Utilisation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223 \documentclass[10pt,a4paper]{article} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{lmodern} \usepackage{xcolor} \usepackage{fp} \usepackage[counter=mdp]{lcg} \makeatletter \newcount\nbchar \newcount\charspec \newcount\chiffre \newcount\Lettre \newcount\lettre \newcount\nbdesecurite \parindent=0pt %%%%%%%%%%%%%%%%%%%%%%%générateur de mot de passe%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand\genmdp@i{%commande reccursive \chgrand[first=1,last=100]\rand% \unless\ifnum\arabic{mdp}>\propchar%utilisation des caractères spéciaux si argument optionnel \let\next=\relax% \advance\charspec by 1 % \chgrand[last=14]\rand% \ifnum\arabic{mdp}=1\edef\m@tdepasse{\m@tdepasse ]}\fi%ajout au mdp \ifnum\arabic{mdp}=2\edef\m@tdepasse{\m@tdepasse ù}\fi% \ifnum\arabic{mdp}=3\edef\m@tdepasse{\m@tdepasse [}\fi% \ifnum\arabic{mdp}=4\edef\m@tdepasse{\m@tdepasse @}\fi% \ifnum\arabic{mdp}=5\edef\m@tdepasse{\m@tdepasse =}\fi% \ifnum\arabic{mdp}=6\edef\m@tdepasse{\m@tdepasse :}\fi% \ifnum\arabic{mdp}=7\edef\m@tdepasse{\m@tdepasse ?}\fi% \ifnum\arabic{mdp}=8\edef\m@tdepasse{\m@tdepasse \%}\fi% \ifnum\arabic{mdp}=9\edef\m@tdepasse{\m@tdepasse \$}\fi% \ifnum\arabic{mdp}=10\edef\m@tdepasse{\m@tdepasse *}\fi% \ifnum\arabic{mdp}=11\edef\m@tdepasse{\m@tdepasse .}\fi% \ifnum\arabic{mdp}=12\edef\m@tdepasse{\m@tdepasse !}\fi% \ifnum\arabic{mdp}=13\edef\m@tdepasse{\m@tdepasse ;}\fi% \ifnum\arabic{mdp}=14\edef\m@tdepasse{\m@tdepasse \#}\fi% \else% \chgrand[first=1,last=100]\rand% \ifnum\arabic{mdp}>\propnombre%utilisation de lettres en fonction du "taux" déclaré en argument #1 \let\next=\relax% \chgrand[last=52]\rand% \ifnum\arabic{mdp}<27%lettres minuscules \advance\lettre by 1 % \edef\m@tdepasse{\m@tdepasse\alph{mdp}}%ajout au mdp \else% \advance\Lettre by 1 %lettres majuscule \addtocounter{mdp}{-26}% \edef\m@tdepasse{\m@tdepasse\Alph{mdp}}%ajout au mdp \fi% \else% \let\next=\relax% \advance\chiffre by 1 %chiffres \chgrand[last=10]\rand% \addtocounter{mdp}{-1}% \edef\m@tdepasse{\m@tdepasse\arabic{mdp}}%ajout au mdp \fi% \fi% \advance\nbchar by 1 % \ifnum\nbchar<\l@ngmdp\def\next{\genmdp@i}\fi\next}%fin de la reccursion si compteur=longueur du mdp. \next lance la reccursion qui est terminale \newcommand\motdepasse[3][0]{% \def\propnombre{#2}% \def\propchar{#1} \def\l@ngmdp{#3}% %\let\secure\@empty% \def\m@tdepasse{ }% \def\longmdp{#2} \nbchar=0% initialisation des compteurs \charspec=0% \chiffre=0% \nbdesecurite=0% \Lettre=0% \lettre=0% \genmdp@i% lance la reccursion \hrulefill\par\begin{center}%mise en page du texte et du mot de passe \texttt{\m@tdepasse}% \end{center}\solidite\par La robustesse du mot de passe est : % \medskip\barrepourcent\medskip\par} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%testeur de sécurité%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\solidite{% %%%%%%%%%%%%%%%%%%%%%%%%bonus et penalités %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ifnum\chiffre<\l@ngmdp% \multiply\chiffre by 4\advance\nbdesecurite by\chiffre % \else \advance\nbdesecurite by -\l@ngmdp % \advance\nbdesecurite by -\l@ngmdp % \fi %bonus nb de chiffres, accordé que s'ils ne sont pas seuls,si seuls une pénalité est imposée \ifnum\Lettre>0\advance\Lettre by -\l@ngmdp \fi%bonus majuscules \multiply\Lettre by -2 % \ifnum\charspec=0\ifnum\chiffre=0% \ifnum\lettre=0% \advance\Lettre by -\l@ngmdp%Pénalité si majuscules seules \advance\Lettre by -\l@ngmdp% \else% \ifnum\Lettre=0% \advance\lettre by -\l@ngmdp%pénalité si minuscules seules \advance\lettre by -\l@ngmdp% \fi\fi\fi\fi \ifnum\lettre>0\advance\lettre by -\l@ngmdp \fi%bonus minuscule \multiply\lettre by -2 % \edef\l@ngmdp{\number\numexpr\l@ngmdp*4}% bonus nb de caractères \advance\nbdesecurite by\l@ngmdp % \multiply\charspec by 6 % bonus nb de caractères spéciaux \advance\nbdesecurite by\charspec % \advance\nbdesecurite by\Lettre % \advance\nbdesecurite by\lettre % \def\result{\the\nbdesecurite}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%barre de pourcentage%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\barrepourcent{% \FPeval{\resulta}{\the\nbdesecurite/100}% \FPeval{\resultb}{1-\resulta}% \ifnum\nbdesecurite>100% \textbf{excellente} (100\,\%)\par\fbox{\color{green!90!black!}% \vrule height1.5ex width \linewidth}% \else \ifnum\nbdesecurite<20% \textbf{très mauvaise} (\the\nbdesecurite\,\%)% \par\fbox{\color{red!40!black}% \vrule height1.5ex width \resulta\linewidth depth0pt% \vrule height0pt width \resultb\linewidth depth0pt}% \else% \ifnum\nbdesecurite<40% \textbf{mauvaise} (\the\nbdesecurite\,\%)% \par\fbox{\color{red!95!black}% \vrule height1.5ex width \resulta\linewidth depth0pt% \vrule height0pt width \resultb\linewidth depth0pt}% \else \ifnum\nbdesecurite<60% \textbf{moyen} (\the\nbdesecurite\,\%)% \par\fbox{\color{orange!95!black!}% \vrule height1.5ex width \resulta\linewidth depth0pt% \vrule height0pt width \resultb\linewidth depth0pt}% \else \ifnum\nbdesecurite<80% \textbf{bon} (\the\nbdesecurite\,\%)% \par\fbox{\color{yellow!90!black!}% \vrule height1.5ex width \resulta\linewidth depth0pt% \vrule height0pt width \resultb\linewidth depth0pt}% \else \ifnum\nbdesecurite<100% \textbf{bon} (\the\nbdesecurite\,\%)% \par\fbox{\color{green!50!black!}% \vrule height1.5ex width \resulta\linewidth depth0pt% \vrule height0pt width \resultb\linewidth depth0pt}% \fi \fi \fi \fi \fi \fi% } \makeatother \begin{document} {\Large \textbf{Mots de passe longueur 12 sans caractères spéciaux:}}\par \motdepasse{50}{12}\par \motdepasse{50}{12}\par \motdepasse{50}{12}\par \motdepasse{50}{12}\par \motdepasse{50}{12}\par \motdepasse{50}{12}\par \motdepasse{50}{12}\par \motdepasse{50}{12}\par \motdepasse{50}{12}\par \bigskip {\Large \textbf{Mots de passe longueur 8 sans caractères spéciaux:}}\par \motdepasse{50}{8}\par \motdepasse{0}{8}\par \motdepasse{50}{8}\par \motdepasse{50}{8}\par \motdepasse{50}{8}\par \motdepasse{50}{8}\par \motdepasse{50}{8}\par \motdepasse{50}{8}\par \motdepasse{50}{8}\par \bigskip {\Large \textbf{Mots de passe longueur 12 avec caractères spéciaux:}}\par \motdepasse[50]{50}{12}\par \motdepasse[50]{50}{12}\par \motdepasse[50]{50}{12}\par \motdepasse[50]{50}{12}\par \motdepasse[80]{50}{12}\par \motdepasse[30]{50}{12}\par \motdepasse[10]{50}{12}\par \bigskip {\Large \textbf{Mots de passe de longueur 8 sans chiffre avec et sans caractères spéciaux:}}\par \motdepasse{0}{8}\par \motdepasse[0]{0}{8}\par \motdepasse[50]{0}{8}\par \motdepasse[100]{0}{8}\par \motdepasse[80]{0}{8}\par \motdepasse[20]{0}{8}\par \bigskip {\large\textbf{Mots de passe de longueur 6 sans lettre avec et sans caractères spéciaux :}}\par \motdepasse{100}{6}\par \motdepasse[50]{100}{6}\par \motdepasse{100}{6}\par \motdepasse[30]{100}{6}\par \motdepasse[70]{100}{6}\par \motdepasse{100}{6}\par \bigskip {\Large \textbf{Mots de passe de longueur 10 sans lettre avec et sans caractères spéciaux :}}\par \motdepasse{100}{10}\par \motdepasse[50]{100}{10}\par \motdepasse{100}{10}\par \motdepasse[30]{100}{10}\par \motdepasse[70]{100}{10}\par \motdepasse{100}{10}\par \end{document}
Il n'y a pas de limite (ni minimum ni maximum) pour le nombre de caractères du mot de passe ( En fait si la limite est de 2^31-1, ça devrait suffire ).
Un paramètre optionnel (entre [ et ]), réglé par défaut à 0, permet ou non d'utiliser des caractères spéciaux, ainsi que de régler leur "taux" (aux variations de fréquences du générateur de nombre aléatoire près).
Le deuxième paramètre permet de régler le "taux" de lettre du mot de passe.
Le dernier paramètre permet de choisir la longueur du mot de passe.
On peut donc générer des mots de passe avec ou sans caractères spéciaux, avec ou sans chiffres, avec ou sans lettres.
le testeur de mot de passe est basé sur des bonus (longueurs, caractères speciaux, chiffres,...) et des pénalités (chiffres seuls, maj seules,..)
Merci
concourmdp.pdf
Bonjour,
Voila ma contribution. Je suis étudiant en BTS SIO SLAM 1ere année et c'est ma première application en JAVA.
Code source + jar dans le .rar ici :
http://gatienboquet.olympe.in/developpez/MyPassword.rar
C'est relativement simple, 3 options, on coche si on veut inclure des nombres et/ou caractères spéciaux. On peut aussi changer la longueur du mot de passe générer.
Si vous êtes développeur java, je vous déconseille de regarder le code source
Voila mon petit essai : http://angelsafrania.free.fr/demo/password.html?#
[EDIT]
La petite description qui faisait défaut :
C'est un générateur testeur de mot de passe en HTML5 CSS3 et JS, il faut donc un navigateur récent.
C'est en une page, donc tout est exécuté niveau client, pas de sauvegarde de mot de passe généré. Récupération des mots de passe possible que si le poste de la personne est mise à mal.
Pour le système de calcul des difficultés de mot de passe j'ai pris deux systèmes.
Le premier décrit dans sur le site gouvernemental français : http://www.securite-informatique.gou...rticle728.html
Le second j'ai tenté de faire un système à point (en pourcentage) avec bonus malus (qu'il faut amélioré normalement).
Il me reste un petit bug c'est la première validation pour avoir les mots de passe la page se recharge après quand l'url contient ? c'est bon.
[/EDIT]
La source (mais bon c'est juste un fichier html ^^)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423 <!DOCTYPE html> <html> <head> <title>Générateur de mot de passe</title> <style type="text/css"> /* Smartphones & tablettes */ @media (max-width: 800px) { body { text-align : center; } section { margin-bottom:20px; } } /* Tablettes paysage & écran classique */ @media (min-width: 801px) and (max-width: 1200px) { nav { display: none; } section h1{ text-align:center; } section:nth-of-type(2n + 1) { width:38%; margin-left:2%; float:left; } section:nth-of-type(2n) { width:58%; margin-right:2%; float:right; } } /* Grands écrans */ @media (min-width: 1200px) { section h1{ text-align:center; } section:nth-of-type(2n + 1) { width:30%; margin-left:10%; float:left; } section:nth-of-type(2n) { width:50%; margin-right:10%; float:right; } } section p label { float:left; text-align:right; display:block; width:45%; } section p button { float:left; text-align:center; display:block; width:15%; margin-left:30%; } section p input, section p select { text-align:left; margin-left:5%; } input[required] { padding : 2px; } input[required]:invalid, select:invalid { border-color: #FF6A6A; box-shadow: 0px 0px 5px red; transition-property : box-shadow border-color; transition-duration:0.5s; } input[required]:valid, select:valid { border-color: #7BCC70; box-shadow: 0px 0px 4px green; transition-property : box-shadow border-color; transition-duration:0.5s; } input[required]:focus, select:focus { border-color: #7EB6FF; box-shadow: 0px 0px 6px blue; transition-property : box-shadow border-color; transition-duration:0.5s; } #couleurForce { margin-left:auto; margin-right:auto; width:80%; } section h1 { font-size:1.5em; text-align:center; } section h2 { font-size:1.25em; text-align:center; } table { text-align:center; margin:auto; border-spacing: 0px; border-collapse: collapse; } td { padding:2px; } tr:nth-child(even) { background-color:#EEE; } </style> <script type="text/javascript"> //Donne un mot de passe function getMotDePasse (ensembleCaractere, longueur) { var password = ""; var nbEnsemble = ensembleCaractere.length; for (var i = 0; i < longueur; i++) { password += ensembleCaractere[Math.floor(Math.random() * nbEnsemble)]; } return password; } //Calcule la force de l'ensemble de cataractère associé à la longueur du mot de passe function getForce (tailleEnsembleCaractere, longueur) { var nbCombinaison = Math.pow(tailleEnsembleCaractere, longueur); var force = 0; do { nbCombinaison /= 2; force++; } while(nbCombinaison > 1.5) return force; } var ensembleCaracteres = [ {"valeur" : "abcdefghijklmnopqrstuvwxyz", "nom" : "Alphabétique minuscule", "regex" : "[a-z]" }, {"valeur" : "0123456789", "nom" : "Numérique", "regex" : "[0-9]" }, {"valeur" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "nom" : "Alphabétique Majuscule", "regex" : "[A-Z]" }, {"valeur" : "_-+!?;:.,*&", "nom" : "Caractère spéciaux", "regex" : "[-_!?;:.,*&]"} ]; var forceMotDePasse = [ {"minPourcentage" : 0, "min" : 1, "nom" : "Très très faible", "rgb" : "#8C1717"}, {"minPourcentage" : 25, "min" : 49, "nom" : "Très faible", "rgb" : "#FC1501"}, {"minPourcentage" : 50, "min" : 65, "nom" : "faible", "rgb" : "#EE4000"}, {"minPourcentage" : 65, "min" : 78, "nom" : "Moyen", "rgb" : "#FF7F00"}, {"minPourcentage" : 75, "min" : 82, "nom" : "Bon", "rgb" : "#FCD116"}, {"minPourcentage" : 85, "min" : 104, "nom" : "Fort", "rgb" : "#D1E231"}, {"minPourcentage" : 95, "min" : 130, "nom" : "Très fort", "rgb" : "#CAFF70"} ]; var ponderationForce = [ {"bonusInitial" : 0, "bonusIncremental" : -5, "nom" : "Chiffre uniquement à la fin", "regex" : "^[^0-9]*[0-9]+$"}, {"bonusInitial" : 0, "bonusIncremental" : -5, "nom" : "Chiffre uniquement à au début", "regex" : "^[0-9]+[^0-9]*$"}, {"bonusInitial" : 0, "bonusIncremental" : -5, "nom" : "Caractère spécial uniquement à la fin", "regex" : "^[^-?./:;,#\"\\'+&^$£€]*[-?./:;,#\"\\'+&^$£€]+$"}, {"bonusInitial" : 0, "bonusIncremental" : -15, "nom" : "Répétition", "regex" : "(.{3,}).*\\1"}, {"bonusInitial" : -30, "bonusIncremental" : 30, "nom" : "Minimum de 6 caractères", "regex" : "^.{6,}$"}, {"bonusInitial" : -10, "bonusIncremental" : 20, "nom" : "Minimum de 8 caractères", "regex" : "^.{8,}$"}, {"bonusInitial" : -10, "bonusIncremental" : 5, "nom" : "Minimum de 2 caractères alphabétiques", "regex" : "[a-z]"}, {"bonusInitial" : -10, "bonusIncremental" : 5, "nom" : "Minimum de 2 caractères majuscules", "regex" : "[A-Z]"}, {"bonusInitial" : -10, "bonusIncremental" : 5, "nom" : "Minimum de 2 chiffres", "regex" : "[0-9]"}, {"bonusInitial" : -5, "bonusIncremental" : 5, "nom" : "Minimum de 1 caractère spècial", "regex" : "[^0-9A-Za-z]"} ]; //Variables globales. var inputLongueurMotDePasse; var inputMotDePasse; var inputMotDePasseTesteur; var nodeCouleurForceFr; var nodeCouleurForcePond; var nodeEnsembleCaractere; var nodeAutre; var nodeParagrapheAutre; var autreActive = false; var nodeParagrapheSelectionCaractere; var nodeEnsembleCaractereAutre; //Lance l'application function lancerApplication() { //Récupération des variables globales inputLongueurMotDePasse = document.getElementById('longueurMotDePasse'); inputMotDePasse = document.getElementById('motDePasse'); inputMotDePasseTesteur = document.getElementById('motDePasseTesteur'); nodeCouleurForceFr = document.getElementById('couleurForceFr'); nodeCouleurForcePond = document.getElementById('couleurForcePond'); nodeEnsembleCaractere = document.getElementById('ensembleCaractere'); nodeEnsembleCaractereAutre = document.getElementById('ensembleCaractereAutre'); nodeParagrapheSelectionCaractere = document.getElementById('paragrapheSelectionCaractere'); nodeParagrapheAutre = document.createElement('p'); var labelAutre = document.createElement('label'); labelAutre.innerHTML = 'Caractères additionnelles : '; nodeAutre = document.createElement('input'); nodeAutre.type='text'; nodeAutre.required = 'required'; nodeParagrapheAutre.appendChild(labelAutre); nodeParagrapheAutre.appendChild(nodeAutre); // Remplissage des options d'ensemble de caractères for(var i = 0; i < ensembleCaracteres.length; i++) { var input = document.createElement('option'); input.value = i; input.innerHTML = ensembleCaracteres[i].nom; nodeEnsembleCaractere.insertBefore(input, nodeEnsembleCaractereAutre); } ensembleCaractere.size = ensembleCaracteres.length + 1; //Affichage du panel de couleur pour la force for(var i = 0; i < forceMotDePasse.length; i++) { var span = document.createElement('div'); span.style.backgroundColor = forceMotDePasse[i].rgb; span.style.float = 'left'; span.style.width = Math.floor(100/forceMotDePasse.length) + '%'; span.style.opacity = '0.25'; span.innerHTML = ' '; forceMotDePasse[i].nodeFr = span; nodeCouleurForceFr.appendChild(span); var span = document.createElement('div'); span.style.backgroundColor = forceMotDePasse[i].rgb; span.style.float = 'left'; span.style.width = Math.floor(100/forceMotDePasse.length) + '%'; span.style.opacity = '0.25'; span.innerHTML = ' '; forceMotDePasse[i].nodePond = span; nodeCouleurForcePond.appendChild(span); } //Affichage des ponderations var nodePonderationTBody = document.getElementById('ponderationTBody'); for(var i = 0; i < ponderationForce.length; i++) { var tr = document.createElement('tr'); nodePonderationTBody.appendChild(tr); var tdNom = document.createElement('td'); tdNom.innerHTML = ponderationForce[i].nom; tr.appendChild(tdNom); var tdBonus = document.createElement('td'); tdBonus.innerHTML = ponderationForce[i].bonusInitial; tr.appendChild(tdBonus); var tdBonusIncremental = document.createElement('td'); tdBonusIncremental.innerHTML = ponderationForce[i].bonusIncremental; tr.appendChild(tdBonusIncremental); var tdNbReussite = document.createElement('td'); tdNbReussite.innerHTML = 0; tr.appendChild(tdNbReussite); var tdTotal = document.createElement('td'); tdTotal.innerHTML = ponderationForce[i].bonusInitial; tr.appendChild(tdTotal); var tdRegex = document.createElement('td'); tdRegex.innerHTML = ponderationForce[i].regex; tr.appendChild(tdRegex); ponderationForce[i].nodeNbReussite = tdNbReussite; ponderationForce[i].nodeTotal = tdTotal; } } //Génère le mot de passe en fonction des otpions sélectionné function generer() { if (inputLongueurMotDePasse.validity.valid && ensembleCaractere.validity.valid && (!autreActive || nodeAutre.validity.valid)) { var longueur = inputLongueurMotDePasse.value; var strEnsembleCaractere = ''; for (var i = 0; i < ensembleCaractere.options.length; ++i) { if (ensembleCaractere.options[i].selected && ensembleCaractere.options[i].value == parseInt(ensembleCaractere.options[i].value) ) { strEnsembleCaractere += ensembleCaracteres[ensembleCaractere.options[i].value].valeur; } } if (autreActive) { strEnsembleCaractere += nodeAutre.value; } inputMotDePasse.value = getMotDePasse(strEnsembleCaractere,longueur); inputMotDePasseTesteur.value = inputMotDePasse.value; afficheForce(); } else { inputMotDePasse.value = ''; } } //Affiche la force du mot de passe dans l'input motDePasseTesteur function afficheForce() { afficheForceFr(); afficheForcePond(); } function afficheForceFr() { document.getElementById('forceFr').innerHTML = ' '; var nbEnsemble = getNbEnsemblePourTester(); var force = getForce(nbEnsemble, inputMotDePasseTesteur.value.length); for (var i = 0; i < forceMotDePasse.length;++i) { if (force <= forceMotDePasse[i].min) { forceMotDePasse[i].nodeFr.style.opacity = '0.25'; } else { document.getElementById('forceFr').innerHTML = forceMotDePasse[i].nom; forceMotDePasse[i].nodeFr.style.opacity = '1'; } } } function afficheForcePond() { document.getElementById('forcePond').innerHTML = ' '; var force = calculPonderation(inputMotDePasseTesteur.value); for (var i = 0; i < forceMotDePasse.length;++i) { if (force <= forceMotDePasse[i].minPourcentage) { forceMotDePasse[i].nodePond.style.opacity = '0.25'; } else { document.getElementById('forcePond').innerHTML = forceMotDePasse[i].nom; forceMotDePasse[i].nodePond.style.opacity = '1'; } } } //Donne le pourcentage de ponderation du mot de passe function calculPonderation (motDePasse) { var pourcentage = 50; for (var i = 0; ponderationForce.length > i; ++i) { pourcentage += ponderationForce[i].bonusInitial; var expression = new RegExp(ponderationForce[i].regex); var tmpMotDePasse = motDePasse; var nb = 0; while (expression.test(tmpMotDePasse)) { nb+=1; pourcentage += ponderationForce[i].bonusIncremental; tmpMotDePasse = tmpMotDePasse.replace(expression,''); } ponderationForce[i].nodeNbReussite.innerHTML = nb; ponderationForce[i].nodeTotal.innerHTML = nb * ponderationForce[i].bonusIncremental + ponderationForce[i].bonusInitial; } if (motDePasse.length <= 0) { return 0; } return pourcentage <= 0 ? 1 : pourcentage; } //donne le nombre de l'ensemble caractère pour utilisé dans le mot de passe. function getNbEnsemblePourTester() { var nbEnsemble = 0; var input = inputMotDePasseTesteur.value; for(var i = 0; i < ensembleCaracteres.length; i++) { var expression = new RegExp(ensembleCaracteres[i].regex); if (expression.test(input)) { nbEnsemble += ensembleCaracteres[i].valeur.length; input = input.replace(new RegExp(ensembleCaracteres[i].regex, 'g'),''); } } // Si toutes les correspondances ne sont pas prise if (input.length != 0) { nbEnsemble += input.length;//Il faut d'abord dédoubler les potentielle lettre } return nbEnsemble; } function montrerAutre() { if (nodeEnsembleCaractereAutre.selected) { nodeParagrapheSelectionCaractere.appendChild(nodeParagrapheAutre); autreActive = true; } else if (autreActive) { autreActive = false; nodeParagrapheSelectionCaractere.removeChild(nodeParagrapheAutre); return; } } </script> </head> <body onload="lancerApplication()"> <section> <h1 id="generation">Générateur de mot de passe</h1> <form action="#"> <p> <label for="longueurMotDePasse"> Longueur du mot de passe : </label> <input type="number" min="1" placeholder="1" id="longueurMotDePasse" required="required"/> </p> <p id="paragrapheSelectionCaractere"> <label for="ensembleCaractere">Sélection des ensembles de caractère : </label> <select required="required" multiple="multiple" id="ensembleCaractere" onclick="montrerAutre()" onchange="montrerAutre()"> <option id="ensembleCaractereAutre">Autre</option> </select> </p> <p> <button onclick="generer()">Générer</button> <input type="text" id="motDePasse"/> </p> </form> </section> <section> <h1 id="testeur">Testeur de fiabilité de mot de passe</h1> <p> <label for="motDePasseTesteur">Mot de passe à tester :</label> <input type="text" id="motDePasseTesteur" onkeyup="afficheForce()" onchange="afficheForce()"/> </p> <p> <h2>Méthode du gouvernement Français</h2> <div id="couleurForceFr"> </div> <span id="forceFr"> </span> </p> <p> <h2>Méthode Pondérée</h2> <div id="couleurForcePond"> </div> <span id="forcePond"> </span> <table> <caption>Explication de la ponderation de la force</caption> <theader><tr><th>Nom de la ponderation</th><th>Bonus de base</th><th>Bonus incrémental</th><th>Nombre de réussite</th><th>Total</th><th>Regex</th></tr></theader> <tbody id="ponderationTBody"> </tbody> </table> </p> </section> </body> </html>
Bonjour,
N'hésitez pas à vous reporter à ce tableau pour connaître les éléments manquants à votre participation.
Vous avez jusqu'au dimanche 2 mars 0h00 (heure française) pour compléter ou améliorer votre participation.
Il serait dommage, après tous les efforts que vous avez fournis, que votre participation ne puisse être prise en compte car il manque une description de quelques lignes.
N'oubliez pas aussi que votre générateur doit pouvoir "tester la résistance d'un mot de passe". Un test très basique suffit pour que votre participation puisse être prise en compte.
Si jamais le tableau est incomplet, n'hésitez pas à me contacter par MP ou via le chat.
A noter que je ne serais pas disponible entre approximativement 12h et 18-19h.
Ma contribution:
Il s’agit d’un générateur de mots de passes basé sur des listes de mots.
Ce fonctionnement permet d’obtenir des mots des passes résistants et faciles à retenir.
J'ai visé la simplicité, autant sur le niveau fonctionnel que sur l'interface.
Il est programmé en AutoHotKey(AHK), langage presque inconnu en France. (Dérivé de l'Auto-IT).
Il permet de réaliser des programmes et scripts de façon rapide.
Au niveau du fonctionnement du programme:
L'utilisateur choisi ses préférences, puis le programme teste toutes les possibilités jusqu'à trouver un enchainement valable correspondant à la taille du mot de passe désiré. Sorte de brute force qui teste environ 1600 possibilités par secondes*.
Caractéristiques :
- Programmé en AHK.
- Compatible systèmes Windows (Win9x/NT/XP/VISTA/W7/W8).
- Tout-en-un, un seul fichier (.exe), pas d’installation.
- Langue: Français.
Fonctions :
- Choix du niveau de complexité.
- Choix du nombre de caractère, avec marge.
- Filtre de suppressions (chiffres, caractères spéciaux, majuscules).
- Calcule deux possibilités.
- Donne un indice de résistance.
Source: http://pastebin.com/zrs2YkYH
Téléchargement: http://www.tlams.fr/ressources/Gen_pw.exe
*Bench réalisé sur mon poste (I7/8Go ram)
Bonsoir à tous !
Bon j'arrête là, j'ai passé ma journée dessus
Ca marche, mais j'aurai aimé peaufiner deux trois trucs. La prochaine fois, je regarderais plus souvent les concours, car c'est sympa, surtout quand il pleut !
Passons au projet :
Voici les sources
Le lien
Technique :
Techniquement, vu le manque de temps, je me suis appuyé sur bootstrap et jquery.
La partie génération est côté serveur en PHP, appelé en Ajax sur la page.
J'ai fait un fichier qui génère le code, un autre qui le teste, un autre qui contient les définitions de caractère.
Concept :
J'ai essayé de faire quelque chose de simple. J'ai divisé les caractères par type, et chaque fois qu'un caractère est généré, le prochain doit être d'un type différent. Bien sûr, on évite les répétitions si possible (sur une demande de 50 caractères, c'est dur).
J'ai testé une petite fonctionnalité, qui de mon avis peut être intéressante à défaut d'être vraiment très utile : les masques.
Si l'utilisateur veut à tout pris que certains caractères soient contenus dans son mot de passe, il saisi ses caractères, par exemple "LC", ses initiales.
Il veut ensuite 4 caractères de généré après ces deux lettres. Il tape donc "LC****" .
L'algo sait donc que les deux premiers caractères sont du type lettre, et il va donc générer pour remplacer les astérisques deux caractères entiers, et deux symboles.
Je vous souhaite une très bonne soirée à tous,
Amicalement
PS:j'ai fait une dernière MAJ à 23h55 !! Bonne nuit !
Défi : Créez votre propre générateur de mots de passe
Notez vos projets préférés jusqu'au 1er avril 2014
Bonjour,
La rubrique sécurité vous a proposé, du 15/01/2014 au 01/03/2014, de créer votre propre générateur de mot de passe pour avoir peut-être la chance de le voir hébergé sur Developpez.com.
Ce n'est pas moins de 13 générateurs de mots de passe qui nous ont été soumis :
Auteur Sujet de notation Type Adrael66 lien Web Angelsafrania lien Web iolco51 lien Web LaurentC33 lien Web NoFeaR1991 lien Web SpaceFrog lien Web Spartacusply lien Web thomZz09 lien Web xurei lien Web Itchy lien Applicatif (Java) lemoussel lien Applicatif (C# : Windows) -Nikopol- lien Applicatif (LaTeX) Tlams lien
Applicatif (AHK : Windows)
Nous vous proposons maintenant de noter les soumissions jusqu'au 01/04/2014 afin de désigner les générateurs de mots de passes que vous préférez.
Pour voter, rien de plus simple, allez sur le sujet de notation (voir tableau ci-dessus) et postez afin de donner une note au générateur en suivant le barème suivant :
- fonctionnalités : 4 points ;
- qualité du code : 4 points ;
- commentaire et documentation : 4 points ;
- sécurité de l'application : 4 points ;
- design et inventivité de l'interface : 4 points.
Votre post devra indiquer la note sur 20 que vous donnez au générateur ainsi que les points que vous lui attribuez pour chaque barème. N'hésitez pas aussi à justifier votre note.
Notre partenaire livre, les éditions ENI, offrira aux trois meilleures participations un livre intitulé Ethical Hacking, dont vous pouvez consulter les retours par nos membres.
Vous pouvez consulter ici les règles détaillées de ce défi.
Vous pouvez aussi commenter les participations non valides ici.
Il me semble que le lien de iolco51 est incorrect.
Juste pour dire que l'update (avec le test de robustesse et génération de mot de passe a l'aide de dictionnaires) n'apparait pas dans ma description.
C'est ma très grande faute, puisque je n'ai pas mis a jour le post original (mais je crois que je ne pouvais plus le mettre a jour), et fait un nouveau post: http://www.developpez.net/forums/d14...e/#post7715437... Je m'en excuse.
Est-il possible de modifier la description en fonction? (en rajoutant le post d'update par exemple comme ci-dessous) dans la fin de la description?
UPDATE : J'ai eu un peu de temps et donc ajouté le support de dictionnaires: Anglais et Francais ... Pour la vérification et la génération plus mémorisable. Mais pas encore de texte en Français - mais j'y travaille -
Autre détail: j'ai créé sur le repository GitHub une release correspondant à la version postée Samedi dernier (donc celle du concours)... https://github.com/lcoulet/securePas...developpez.com
Il est possible (mais pas certain) que je cherche à améliorer le code et l'API dans les semaines à venir: finir l'internationalisation, prendre en compte les best practices Javascript, réduire les répétitions dans le code, ajouter mes méthodes randomisées dans les tests unitaires... etc.
Donc au cas ou, et afin de ne pas fausser le concours, ainsi la version du code source soumise restera figée, et les nouvelles mises a jour dans la branche master n'y apparaitront pas.
Merci,
Loic
Bonjour,
Justement, B. Schneier vient de publier un article sur la bonne maniere de choisir un mot passe. Il se base sur les techniques d'attaque pour montrer comment trouver un mot de passe sécurisé.
Bonjour,
Je suis surpris qu'on se donne autant de mal pour ré-inventer quelque chose qui existe déjà.
M'étant déjà penché sur la question de génération de mot de passe pour le grand public grâce au code javascript supportant le standard WAI-ARIA (accessibilité), je me suis aperçu que mon code était bien modeste comparé aux productions d'autres personnes qui ont prévu toutes les options possibles de mots de passe.
Bref, selon moi, un bon générateur comportant un vérificateur de mot de passe devrait être basé sur l'excellente extension Firefox suivante avec l'intégration du standard WAI-ARIA pour l'accessibilité :
Secure Password Generator
Cordialement.
le generateur
http://remyaumeunier.chez-alice.fr/gene.html
mesure de la qualité du geneateur
http://remyaumeunier.chez-alice.fr/testAlea.html
le generateur de psw
http://remyaumeunier.chez-alice.fr/c...eGene/psw.java
désoler pour le retard
cordialement remy
Ci-joint la participation de Wiwaxia
Je viens de faire un tour des projets réalisés et j'ai remarqué que la plupart des quelques notations proviennent soit des codeurs qui se notent eux mêmes, soit d'autres participants.
C'est très bien pour développer son sens de l'autocritique, mais la partialité laisse à désirer...
Je suis entièrement d'accord avec toi Tlams.
Je plaide coupable, et suis malgré tout un peu déçu d'être le seul à avoir fait l'effort d'analyser et noter toutes les candidatures.
J'ai bien précisé dans mescritiquesévaluations que je suis partial.
C'est un peu dommage qu'il n'y ait pas plus de succès... Car c'est un concours sympa.... et car l'exercice est aussi intéressant que de produire le code... même si l'investissement en temps est considérable pour évaluer sérieusement toutes les soumissions.
Bonjour,
Les votes sont désormais clos.
Les résultats de ce défi vous seront communiqués d'ici quelques jours le temps de les mettre en forme.
Partager