
PRG this may generate a password, desired length
we add a login
adding a name (eg the address of the site, forum or email linked to the password)
can Save the created profile
the [Password PRG] is used to create a general password
this will prevent the opening of the PRG by anyone
thus, a single PRG for all passwords
the passwords are saved in a file Encrypted
the general password is encrypted
; info: The password is generated with the content of the variable Ref.s (in Procedure.s password(longueur, level.i))
; you can put what you want as a character !! genre: ref.s = "01" for the Binary Pass or "aoieuy" to pass a vowel

in French
voici un porte clef numerique
ce prg peut, generer un password ,de longueur désiré
on y ajoute un login
on ajoute un nom (par exemple l'adresse du site, du forum ou de l'email lié au password)
on peut Sauvegarder la fiche créé
le bouton [Password prg] sert pour creer un password general
cela empechera l'ouverture du prg par n'importe qui
ainsi , un seul prg pour avoir tout les passwords
les passwords sont sauvé dans un fichier Crypté
le mot de passe general est aussi crypté

the code :
Code: Select all
;***********************************************
;Titre :*password_generator
;Auteur : Dobro
;Date :11/01/2016
;Heure :16:53:16
;Version Purebasic : PureBasic 5.30 (Windows - x86)
;Version de l'editeur :EPB V2.62
; Libairies necessaire : Aucune
; info : le password est generé avec le contenu de la cariable 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 encode_text(de,passwrd.s,message.s)
Declare.s decode_text(de,passwrd.s,message.s)
;{- Enumerations / DataSections
;{ Windows
Enumeration
#Win
#file
EndEnumeration
;}
;{ Gadgets
Enumeration
#Button_pass
#Button_gen
#Button_sauve
#Button_edit
#button_supr
#Text_1
#Text_2
#String_nbr_car
#String_level
#Text_Auteur
#String_out
#liste
#Text_login
#String_Login
#Text_pass
#Text_titre
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="clef" ; 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= decode_text(8,clef.s,pass_gen.s)
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_pass
pass_gen.s=InputRequester("Question","entrez un mot pass pour proteger vos données","",#PB_InputRequester_Password)
pass_gen.s= Encode_text(8,CLef.s,pass_gen.s)
OpenFile(#file,"pass.inf")
WriteStringN(#file,pass_gen.s)
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 du passwrd", "entrez un nom pour ce passwrd","")
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 du passwrd", "entrez un nom pour ce passwrd", Resultat$)
if nom_pass.s<>""
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()
If OpenWindow(#Win, 583, 160, 308, 390, "password_generator", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
;If CreateGadgetList(WindowID(#Win))
ButtonGadget(#Button_pass, 215, 345, 85, 25, "password prg")
ButtonGadget(#Button_gen, 215, 60, 85, 25, "Genere")
ButtonGadget(#Button_sauve, 220, 150, 85, 25, "Sauve")
ButtonGadget(#Button_edit, 220, 180, 85, 25, "Edit")
ButtonGadget(#button_supr, 220, 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, 50, 20, "By Dobro")
StringGadget(#String_out, 70, 120, 230, 20, "")
ListViewGadget(#liste, 10, 145, 200, 220)
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, 225, 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_ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789"; 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()
nom.s=Encode_text(8,clef.s,fiche()\nom.s)
WriteStringN(#file,nom.s) ; ecrit le nom de la fiche
Longueur1.s=Encode_text(8,clef.s,str(fiche()\Longueur.i))
WriteStringN(#file,Longueur1.s); ecrit la longueur
Level1.s =Encode_text(8,clef.s,str(fiche()\Level.i ))
WriteStringN(#file,Level1.s ); ecrit le level
password1.s=Encode_text(8,clef.s,fiche()\password.s)
WriteStringN(#file,password1.s) ; ecrit le password
login1.s=Encode_text(8,clef.s,fiche()\login.s)
WriteStringN(#file,login1.s) ; ecrit le password
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 1 pour charger une fiche non crypté (ancien code )
if charge_clair=1
fiche()\nom.s=decode_text(8,clef.s,ReadString(#file)) ;lit le nom de la fiche
fiche()\Longueur.i=val(decode_text(8,clef.s,ReadString(#file))); litla longueur
fiche()\Level.i=val(decode_text(8,clef.s,ReadString(#file))); litle level
fiche()\password.s=decode_text(8,clef.s,ReadString(#file)) ; lit le password
fiche()\login.s=decode_text(8,clef.s,ReadString(#file)) ; lit le login
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
Endif
; affiche dans la liste
AddGadgetItem(#liste, compteur, fiche()\nom.s)
compteur=compteur+1
wend
CloseFile(#file)
Endif
EndProcedure
;
Procedure.s Encode_text(de,passwrd.s,message.s)
; By Dobro
; de=initialisation du randomseed
; de2 = chaque lettre du mot de pass sert de generateur aleatoire
pos_pass=1
long_pass=len(passwrd.s)
;ClearClipboard ()
RandomSeed(de)
chaine_codee$= ""
;SetGadgetAttribute(#ProgressBar, #PB_ProgressBar_Maximum, Len(message.s))
For position_caractere = 1 To Len(message.s)
;SetGadgetState(#ProgressBar, position_caractere)
;UpdateWindow_(GadgetID(#ProgressBar))
Caractere$ = Mid(message.s, position_caractere, 1)
car_pass$ = Mid(passwrd.s, pos_pass, 1)
Caractere.c=asc(Caractere$)
car_pass.c=asc(car_pass$)
alea=random(8,1) ; ceci pourrai etre un parametre suplementaire dans l'interface
code.c=(Caractere.c ! car_pass.c) +64
code.c=code.c+alea
; Respecte les retours a la ligne
If Caractere.c=10
code.c=10
ElseIf Caractere.c=13
Code.c=13
Endif
chaine_codee$=chaine_codee$+chr(code.c)
pos_pass=pos_pass+1
if pos_pass>long_pass
pos_pass=1
Endif
Next position_caractere
;SetGadgetState(#ProgressBar, 0)
ProcedureReturn chaine_codee$
EndProcedure
Procedure.s Decode_text(de,passwrd.s,message.s)
; By Dobro
; de=initialisation du randomseed
; de2 = chaque lettre du mot de pass sert de generateur aleatoire
pos_pass=1
long_pass=len(passwrd.s)
;ClearClipboard()
;;phrase$ = GetGadgetText(#Message)
;SetGadgetAttribute(#ProgressBar, #PB_ProgressBar_Maximum, Len(message.s))
;UpdateWindow_(GadgetID(#ProgressBar))
;de = GetGadgetState(#spinseed)
RandomSeed(de)
;de2 = GetGadgetState(#spinrandom)
For position_caractere = 1 To Len(message.s)
;SetGadgetState(#ProgressBar, position_caractere )
;UpdateWindow_(GadgetID(#ProgressBar))
Caractere$ = Mid(message.s, position_caractere, 1)
car_pass$ = Mid(passwrd.s, pos_pass, 1)
Caractere.c=asc(Caractere$)
car_pass.c=asc(car_pass$)
alea=random(8,1)
if Caractere.c>13
Caractere.c=Caractere.c-alea
Endif
code.c=(Caractere.c ! car_pass.c) +64
; Respecte les retours a la ligne
If Caractere.c=10
code.c=10
ElseIf Caractere.c=13
Code.c=13
Endif
chaine_decode.s= chaine_decode.s+chr(code.c)
pos_pass=pos_pass+1
if pos_pass>long_pass
pos_pass=1
Endif
Next position_caractere
;ClearGadgetItems(#editor)
;SetGadgetState(#ProgressBar, 0)
ProcedureReturn chaine_decode.s
EndProcedure
; Epb