password Generator

Programmation d'applications complexes
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

password Generator

Message par Zorro »

le revoilou :
Image
petit plus, les mots de pass conservés sont encodés Vigenere :)

Rappel : Password Generator permet en premier lieu de generer des mots de pass complexe
la variable Ref.s ligne 272 contient "l'alphabet" qui sert a generer les mots de pass

je vous conseille de personnaliser cet Alphabet ! c'est dans cet alphabet que seront choisi les carateres qui formeront le mot de pass
si vous demandez un mot de pass d'une longueur de 13 lettres, avec le meme Level
ce sera toujours le même mot de pass qui sera généré !! ( a condition que la Variable REF.s ne change pas )
l'alphabet conditionne les listes genérés .. bien comprendre que changer l'alphabet et vous ne pourrez plus retrouver les meme mots de pass...
il faut definir l'alphabet, et ne plus y toucher ...

c'est une sécurité pour pouvoir retrouver un mot de pass qu'on aurai perdu ....
il suffit de connaître la longueur du mot de pass et son level pour le retrouver (en ayant le meme Alphabet bien sur )


vous pouvez bien sur directement ecrire votre propre mot de pass dans le champs prevu a cette effet
vous entrez le login éventuellement

le bouton [sauve] permet de sauver la fiche ,
le prg vous demandera le nom de la fiche ... entrez par exemple "Site : http://www.meteo.fr"
soyez explicite dans le choix des noms, ça permet de s'y retrouver par la suite :)

le bouton [Supr] permet de supprimer une fiche

le bouton [edit] permet d'editer une fiche .. (ce point est sûrement a revoir )
on a plus vite fait de supprimer la fiche , et de la refaire ..

Le bouton [Genere] , va tout simplement générer un mot de pass qui utilisera les paramètres "Nbr de caractere" et "Level"

Le bouton [tri], permet de trier par ordre alphabetique la liste des fiches contenant le password

Le bouton [password Prg] , permet de proteger l'acces au prg par un mot de pass

Code : Tout sélectionner



;***********************************************
;Titre  :*password_generator
;Auteur  : Dobro
;Date  :11/01/2016
;Heure  :16:53:16
;Version Purebasic :  PureBasic 5.50 (Windows - x86)
;Version de l'editeur :EPB V2.62
; Libairies necessaire : Aucune
; info : le password est generé avec le contenu de la variable Ref.s (dans la procedure password )
; on peut y mettre ce que l'on veux comme caractere !! genre :    ref.s="01"
;***********************************************
Declare gadgetballoontooltip(windownumber.l, gadgetnumber.l, text.s)
Declare changegadgetballoontooltip(tooltip.l, gadgetnumber.l, text.s)
Declare freeballoontooltip(tooltip.l)
Declare openwindow_win()
Declare.s password(longueur, level.i)
Declare sauvegarde_fiche()
Declare charge_fiche()
Declare.s rallonge_password(pass.s,longueur_pass)
Declare.s vigenere(txt.s,pass.s,mode)
Declare Recherche(Terme.s)
;{- Enumerations / DataSections
;{ Windows
Enumeration
		#Win
		#file
EndEnumeration
;}
;{ Gadgets
Enumeration
		#Button_pass
		#Button_gen
		#Button_sauve
		#Button_edit
		#button_supr
		#button_tri
		#button_recherche
		#Text_1
		#Text_2
		#String_nbr_car
		#String_level
		#Text_Auteur
		#String_out
		#liste
		#Text_login
		#String_Login
		#Text_pass
		#Text_titre
		#font
EndEnumeration
;}
;{ Fonts
Enumeration
		#Font_Text_titre
EndEnumeration

Structure fiche
		nom.s
		Longueur.i
		Level.i
		password.s
		login.s
EndStructure
Global NewList fiche.fiche() 
Global Button_gen_Tooltip,level.i,longueur.i,nom_pass.s,index
Global Clef.s="dobro" ; clef qui sert a l'encryptage/decryptage
; on lit le fichier de mot de pass
OpenFile(#file,"pass.inf") ; on le lit
		pass_gen.s=ReadString(#file)
CloseFile(#file)
pass_gen.s=vigenere(pass_gen.s,clef.s,0)
p.s=InputRequester("Question","entrez le mot de pass","",#PB_InputRequester_Password)
If p.s<>pass_gen.s
		End
EndIf
;}
OpenWindow_Win()
charge_fiche()





;{- Event loop
Repeat
		Event = WaitWindowEvent(12)
		Select Event
				; ///////////////////
				Case #PB_Event_Gadget
				Select EventGadget()
						Case #Button_gen
						longueur.i=Val(GetGadgetText(#String_nbr_car)) ; recup la longueur
						level.i=Val(GetGadgetText(#String_level)) ; recupe le level ...et zou²
						passwrd.s=password(longueur.i, level.i) ; genere le passwords
						SetGadgetText(#String_out,passwrd.s)
						;;SetGadgetText(#string_login,login.s)
						;;SetClipboardText(passwrd.s)
						Case #Text_1
						Case #Text_2
						Case #String_nbr_car
						longueur.i=Val(GetGadgetText(#String_nbr_car))
						Case #String_level
						level.i=Val(GetGadgetText(#String_level))
						Case #Text_Auteur
						Case #button_recherche
						Terme.s=InputRequester("Recherche","Entrer le Terme Recherché","")
						 Recherche(Terme.s)
						Case #button_tri
						SortStructuredList(  Fiche(),#PB_Sort_Ascending |#PB_Sort_NoCase  , OffsetOf(Fiche\nom.s), TypeOf(Fiche\nom.s) )						
						
						ClearGadgetItems(#liste)
						ForEach Fiche()
								AddGadgetItem(#liste,-1, fiche()\nom.s)
						Next
						Sauvegarde_fiche()
						
						Case #Button_pass
						pass_gen.s=InputRequester("Question","entrez un mot pass pour proteger vos données","",#PB_InputRequester_Password)
						pass_gen.s=vigenere(pass_gen.s,clef.s,1)
						OpenFile(#file,"pass.inf",#PB_Ascii  )
								WriteStringN(#file,pass_gen.s,#PB_Ascii  )
						CloseFile(#file)
						MessageRequester("Info","Ok mot de pass Sauvé")
						Case #String_out
						Case #String_Login
						Case #liste
						If GetGadgetState(#liste)<>-1
								index=GetGadgetState(#liste)
								SelectElement(Fiche(),index)
								SetGadgetText(#String_level,Str(fiche()\Level.i))
								SetGadgetText(#String_nbr_car,Str(fiche()\Longueur.i))
								SetGadgetText(#String_out,fiche()\password.s)
								SetGadgetText(#string_login,fiche()\login.s)
						EndIf
						Case #Button_sauve
						nom_pass.s=""
						nom_pass.s = InputRequester("nom de la fiche", "entrez un nom pour cette fiche","")
						AddGadgetItem(#liste,-1, nom_pass.s )
						AddElement(fiche()) 
						fiche()\nom.s=nom_pass.s   ; recup le nom de la fiche
						fiche()\Longueur.i=Val(GetGadgetText(#String_nbr_car)) ; recup la longueur
						fiche()\Level.i=Val(GetGadgetText(#String_level)) ; recupe le level 
						fiche()\password.s=GetGadgetText(#String_out); recup le password
						fiche()\login.s=GetGadgetText(#string_login); recup le login
						Sauvegarde_fiche()
						charge_fiche()
						Case #button_edit
						nom_pass.s="": Resultat$=""
						If GetGadgetState(#liste)<>-1
								index=GetGadgetState(#liste)
								Resultat$ = GetGadgetItemText(#liste,index)
								nom_pass.s = InputRequester("nom de la fiche", "entrez un nom pour cette fiche", Resultat$)
								If nom_pass.s<>""
										RemoveGadgetItem(#liste,index)
										SetGadgetItemText(#liste, index, nom_pass.s)
										SelectElement(fiche(), index)
										fiche()\nom.s=nom_pass.s  ; pose le nom dans la fiche
										Sauvegarde_fiche()
										charge_fiche()
								EndIf
						Else
								MessageRequester("info,","selectionnez un element dans la liste avant edition .")
						EndIf
						Case #button_supr
						If GetGadgetState(#liste)<>-1
								index=GetGadgetState(#liste)
								Resultat$ = GetGadgetItemText(#liste,GetGadgetState(#liste))
								If Resultat$ <>""
										RemoveGadgetItem(#liste,index)
										SelectElement(fiche(),  index)
										DeleteElement(fiche()) 
										Sauvegarde_fiche()
										charge_fiche()
								EndIf
						Else
								MessageRequester("info,","selectionnez un element dans la liste avant suppression .")
						EndIf
				EndSelect
				; ////////////////////////
				Case #PB_Event_CloseWindow
				Select EventWindow()
						Case #Win
						Sauvegarde_fiche()
						CloseWindow(#Win)
						Break
				EndSelect
		EndSelect
ForEver
;
;}
; Zone procedures
; Create tooltip
Procedure GadgetBalloonToolTip(WindowNumber.l, GadgetNumber.l, Text.s)
		Protected Tooltip.l, Balloon.TOOLINFO
		Tooltip = CreateWindowEx_(0, "ToolTips_Class32", "", #WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON, 0, 0, 0, 0, WindowID(WindowNumber), 0, GetModuleHandle_(0), 0)
		SendMessage_(Tooltip, #TTM_SETTIPTEXTCOLOR, GetSysColor_(#COLOR_INFOTEXT), 0)
		SendMessage_(Tooltip, #TTM_SETTIPBKCOLOR, GetSysColor_(#COLOR_INFOBK), 0)
		SendMessage_(Tooltip, #TTM_SETMAXTIPWIDTH, 0, 180)
		Balloon\cbSize = SizeOf(TOOLINFO)
		Balloon\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
		If IsGadget(GadgetNumber)
				Balloon\hwnd = GadgetID(GadgetNumber)
				Balloon\uId = GadgetID(GadgetNumber)
		Else
				Balloon\hwnd = GadgetNumber
				Balloon\uId = GadgetNumber
		EndIf
		Balloon\lpszText = @Text
		SendMessage_(Tooltip, #TTM_ADDTOOL, 0, @Balloon)
		ProcedureReturn Tooltip
EndProcedure
; Change tooltip text
Procedure ChangeGadgetBalloonToolTip(Tooltip.l, GadgetNumber.l, Text.s)
		Protected Balloon.TOOLINFO
		Balloon\cbSize = SizeOf(TOOLINFO)
		Balloon\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
		If IsGadget(GadgetNumber)
				Balloon\hwnd = GadgetID(GadgetNumber)
				Balloon\uId = GadgetID(GadgetNumber)
		Else
				Balloon\hwnd = GadgetNumber
				Balloon\uId = GadgetNumber
		EndIf
		Balloon\lpszText = @Text
		SendMessage_(Tooltip, #TTM_ADDTOOL, 0, @Balloon)
EndProcedure
; Free tooltip
Procedure FreeBalloonTooltip(Tooltip.l)
		DestroyWindow_(Tooltip.l)
EndProcedure 
;
;}
Procedure OpenWindow_Win()
		LoadFont(#font,"Arial",10,#PB_Font_Bold       )
		x_espace=100 :y_espace=50
		If OpenWindow(#Win, 583, 160, 308+x_espace, 390+y_espace, "password_generator", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
				;If CreateGadgetList(WindowID(#Win))
				ButtonGadget(#button_tri, 215+x_espace, 305, 85, 25, "Tri")				
				ButtonGadget(#Button_pass, 215+x_espace, 345, 85, 25, "password prg")				
				ButtonGadget(#Button_gen, 215+x_espace, 60, 85, 25, "Genere")
				ButtonGadget(#button_recherche, 215+x_espace, 90, 85, 25, "Recherche")
				;
				ButtonGadget(#Button_sauve, 220+x_espace, 150, 85, 25, "Sauve")
				ButtonGadget(#Button_edit, 220+x_espace, 180, 85, 25, "Edit")
				ButtonGadget(#button_supr, 220+x_espace, 210, 85, 25, "Supr")
				
				TextGadget(#Text_1, 0, 65, 75, 20, "Nbr Caracteres:")
				TextGadget(#Text_2, 115, 65, 35, 20, "Level :")
				StringGadget(#String_nbr_car, 75, 60, 30, 20, "6", #PB_String_Numeric)
				StringGadget(#String_level, 150, 60, 25, 20, "1", #PB_String_Numeric)
				TextGadget(#Text_Auteur, 0, 370+y_espace, 70, 20, "By Dobro")
				StringGadget(#String_out, 70, 120, 230, 20, "")	  
				ListViewGadget(#liste, 10, 145, 200+x_espace, 220+y_espace,#PB_ListView_Multiselect)				
				SetGadgetFont(#liste, FontID(#font)) 
				SetGadgetColor(#liste, #PB_Gadget_BackColor ,RGB(136,213,0))
				
				TextGadget(#Text_login, 25, 90, 35, 20, "Login")
				StringGadget(#String_Login, 70, 90, 230, 20, "")
				
				TextGadget(#Text_pass, 20, 120, 40, 20, "Passwrd")
				TextGadget(#Text_titre, 45, 5, 250, 35, "PassWord_Generator", #PB_Text_Center)
				; Gadget Fonts
				SetGadgetFont(#Text_titre, LoadFont(#Font_Text_titre, "Microsoft Sans Serif", 14, #PB_Font_HighQuality))
				;EndIf
		EndIf
EndProcedure
Procedure.s password(longueur, level.i) 
		;by Dobro

		ref.s="abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" ; les caracteres qui vont composer le passWord; ça peut etre n'importe quoi !! (hehe)
		
		long_ref=Len(ref.s)-CountString(ref.s,",")
		RandomSeed(level.i)
		For i=1 To  longueur   
				;
				; prends une lettre au hasard dans Ref.s
				de=Random(long_ref,1)
				car.s=Mid( ref.s,de,1) : cari.i=Asc(car.s)
				;
				text_sorti.s=text_sorti.s+car.s  ;
		Next i
		ProcedureReturn text_sorti.s
EndProcedure
Procedure Sauvegarde_fiche()
		If FileSize("fiches_password.inf")<>-1
				DeleteFile("fiches_password.inf", #PB_FileSystem_Force)
		EndIf
		OpenFile(#file,"fiches_password.inf"  )
				ForEach  fiche()
						encode=1
						Select Encode 
								Case 1
								;nom.s=Encode_text(8,clef.s,fiche()\nom.s)
								nom.s=vigenere(fiche()\nom.s,clef.s,1)
								WriteStringN(#file,nom.s  )  ; ecrit le nom de la fiche
								;	Longueur1.s=Encode_text(8,clef.s,str(fiche()\Longueur.i))
								Longueur1.s=vigenere(Str(fiche()\Longueur.i),clef.s,1)
								WriteStringN(#file,Longueur1.s  ); ecrit la longueur
								;	Level1.s =Encode_text(8,clef.s,str(fiche()\Level.i ))
								Level1.s =vigenere(Str(fiche()\Level.i ),clef.s,1)
								WriteStringN(#file,Level1.s   ); ecrit le level 
								;password1.s=Encode_text(8,clef.s,fiche()\password.s)
								password1.s=vigenere(fiche()\password.s,clef.s,1)
								WriteStringN(#file,password1.s  ) ; ecrit le password
								;login1.s=Encode_text(8,clef.s,fiche()\login.s)
								login1.s=vigenere(fiche()\login.s,clef.s,1)
								WriteStringN(#file,login1.s  ) ; ecrit le password
								Case 0; pour eventuellement sauver tout en clair !!
								nom.s=fiche()\nom.s
								WriteStringN(#file,nom.s  )  ; ecrit le nom de la fiche
								Longueur1.s=Str(fiche()\Longueur.i)
								WriteStringN(#file,Longueur1.s  ); ecrit la longueur
								Level1.s =Str(fiche()\Level.i )
								WriteStringN(#file,Level1.s   ); ecrit le level 
								password1.s=fiche()\password.s
								WriteStringN(#file,password1.s  ) ; ecrit le password
								login1.s=fiche()\login.s
								WriteStringN(#file,login1.s  ) ; ecrit le password
						EndSelect
				Next
		CloseFile(#file)
EndProcedure
;
Procedure charge_fiche()
		ClearGadgetItems(#liste)
		If FileSize("fiches_password.inf")<>-1
				OpenFile(#file,"fiches_password.inf" )
						compteur=0
						ClearList(Fiche()) 
						While Eof(#file) = 0 					
								AddElement(fiche())
								charge_clair=1 ; ici mettre a 0 pour charger une fiche non crypté (ancien code ) 
								If charge_clair=1
										fiche()\nom.s=vigenere(ReadString(#file),clef.s,0)										
										fiche()\Longueur.i=Val(vigenere(ReadString(#file),clef.s,0))										
										fiche()\Level.i=Val(vigenere(ReadString(#file),clef.s,0))
										fiche()\password.s=vigenere(ReadString(#file),clef.s,0)
										fiche()\login.s=vigenere(ReadString(#file),clef.s,0)
										
								Else
										;pour rendre compatible avec l'ancienne version , charge la fiche non crypté
										fiche()\nom.s=ReadString(#file  )    ; ecrit le nom de la fiche
										fiche()\Longueur.i=Val(ReadString(#file  ));lit la longueur
										fiche()\Level.i=Val(ReadString(#file  )); lit le level 
										fiche()\password.s=ReadString(#file  ) ; lit le password				
										fiche()\login.s=ReadString(#file  ) ; lit le login
								EndIf
								;calldebugger
								If fiche()\nom.s="" 
										DeleteElement(fiche()) 																					
								Else  	; affiche dans la liste
										AddGadgetItem(#liste, compteur, fiche()\nom.s)
										compteur=compteur+1
								Endif
								
								
								
						Wend
				CloseFile(#file)
				
		EndIf
EndProcedure
;
Procedure.s rallonge_password(pass.s,longueur_pass)
		; By Zorro
		; le but de cette procedure, est de rallonger un mot de pass en prenant des lettres de ce mot de pass
		; de la sorte, on peut avoir un mot de pass aussi long que le truc qu'on encode/decode
		; ce qui garantie un quasi inviolabilité du codage :o)
		Protected passwrd.s,long
		RandomSeed(8) ; <<<< ceci pour etre sur qu'avec un mot de pass precis, on est toujours le meme résultat une fois rallongé !! (pour le decodage c'est mieux LOL )
		; par exemple avec le pass "Soleil" et la longueur 23 on aura toujours ceci de genréré : "SoleilieoeSeiolollilieS"  :o)
		long= Len(pass.s)-1		
		If long<longueur_pass				
				manque=(longueur_pass-long)-1
				passwrd.s=pass.s
				For y= 1 To manque
						pos=Random(long,1)						
						passwrd.s=passwrd.s+Mid(pass.s,pos,1)					
				Next y
				ProcedureReturn passwrd.s
		Else
				ProcedureReturn pass.s
		EndIf
EndProcedure

Procedure.s Vigenere(txt.s,pass.s,mode)
		; By Zorro
		; ici j'utilise un alphabet tres classique, mais le mieux serai de melanger les lettres de l'alphabet
		; pour ne pas rendre prévisible l'emplacement de telle ou telle lettre ;o)
		; tout caractere n'etant pas dans l'alphabet , est utilisé telquel (je prends son code Ascii)
		; j'ai Ajouté l'espace, pour  ne pas avoir une découpe des mots qui aparaitrait dans le resultat codé :o)
		Alphabet.s="abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
		sortie.s=""
		If Len(pass.s)<Len(txt.s)
				pass.s=rallonge_password(pass.s,Len(txt.s))
		Else
				pass.s=Left(pass.s,Len(txt.s))
		EndIf
		Select mode
				Case 1 ; Action encodage				
				For p=1 To Len(txt.s)
						car_clair=FindString(Alphabet.s,Mid(txt.s,p,1)) 
						car_pass=FindString(Alphabet.s,Mid(pass.s,p,1))
						car_encode=(car_clair+car_pass)
						If car_encode >Len(Alphabet.s)
								car_encode=car_encode-Len(Alphabet.s)
						EndIf
						If car_clair=0					
								sortie.s=sortie.s+Mid(txt.s,p,1)
						Else
								sortie.s=sortie.s+Mid(Alphabet.s,car_encode,1)
						EndIf
						
				Next p
				Case 0 ; Action décodage
				For p=1 To Len(txt.s)
						car_clair=FindString(Alphabet.s,Mid(txt.s,p,1))
						car_pass=FindString(Alphabet.s,Mid(pass.s,p,1))	
						
						car_decode=(car_clair-car_pass) 
						If car_decode<1:car_decode=Len(Alphabet.s)+car_decode	:EndIf
						If car_clair=0						
								sortie.s=sortie.s+Mid(txt.s,p,1)
						Else
								sortie.s=sortie.s+Mid(Alphabet.s,car_decode,1)
						EndIf
				Next p
				
		EndSelect
		
		ProcedureReturn sortie.s
EndProcedure

;


Procedure Recherche(Terme.s)
		Co1=0
	
		Foreach  fiche() ; Parmis tout les elements de la liste				
				if findstring(Lcase(fiche()\nom.s),Lcase(Terme.s)) ; on recherche le Terme demandé
						SetGadgetItemState(#liste,Co1,#true) ;- si present, on selectionne l'element de la listView correspondant
				Endif
				Co1=Co1+1
		Next
EndProcedure 

; 
; Epb
Dernière modification par Zorro le sam. 23/févr./2019 9:35, modifié 13 fois.
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: password Generator

Message par Zorro »

suite a correction de ma procedure Vigenere()
j'ai aussi mis a jour ce code :)
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

Re: password Generator

Message par Bernie »

Merci pour ce partage
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: password Generator

Message par Zorro »

Ajout dans le code d'un bouton [Tri]
qui permet de trier par ordre alphabetique la liste des passwords

modification du bouton [Edit] qui permet maintenant de vraiment éditer une fiche password
en remplaçant celle existante (avant ça ajoutait, il fallait ensuite effacer l'ancienne )

j'ai Grossi les caractères de la liste des fiches car je n'y voyais plus rien :mrgreen:
et mis un peut de couleur car j'aime bien le vert ... :)

n'oubliez pas de personaliser la chaine contenant les caracteres qui servent a la generation du mot de pass (Ligne 373)
on peut mettre ce qu'on veux , par exemple si vous mettez que "01" ça va vous generer des mots de pass type binaire :)

a savoir, on peut aussi entrer ses propres mots de pass , a la main sans faire generer , ils seront sauvés lorsque vous quitterez le prg
ou bien en utilisant le bouton [Tri]

le bouton [Password Prg] permet de proteger votre liste de mots de pass par un passwords (password d'acces au prg )
la liste des mots de pass etant sauvée "codé" Vigenere ....

pour info , le password d'acces au prg est sauvé dans un fichier a coté du prg, si ce fichier est effacé
ça permet d'avoir acces au prg quand meme...(et donc de pouvoir avoir acces a nos passwords)
j'ai laissé volontairement cette faille facilement corrigeable
pour pouvoir acceder quand meme a notre liste de mots de pass , si on a oublié le passord d'acces au prg ....
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
MLD
Messages : 1097
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: password Generator

Message par MLD »

Cool Zorro :lol:
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: password Generator

Message par Zorro »

Merci :)
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: password Generator

Message par Zorro »

code mis a jour le 23/02/2019 ;)

AVANT 1er UTILISATION Personalisez la Variable Ref.s ligne 272 !!!

sinon le prg generera les meme mots de passe que n'importe qui !

la variable Ref. permet de personaliser la generation de mots de pass

ex : si vous utilisez Ref.s ="01" tout vos mots de pass seront binaire !! (bien sur ne le faites pas... personnalisez mieux l'alphabet )
vous pouvez mettre la longueur et les caracteres que vous voulez dans Ref ...
mais apres, ni touchez plus ... compilez le prg ... vos mots de pass seront "retrouvable" par le prg grace a cet Alphabet défini ...


Note : on est pas obligé d'utiliser les mots de pass genéré par le prg , on peut aussi remplir les champs a la main
avant de sauver une fiche ...
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
MLD
Messages : 1097
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: password Generator

Message par MLD »

@Zorro
Merci pour la mise a jour
Vient plus souvent, ce sera cool. Un peu n'animation ne fera pas de mal.
Bon WE
Répondre