[Tuto] Verrouiller un programme - MD5 / Hidegadget (4.41)

Informations pour bien débuter en PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

[Tuto] Verrouiller un programme - MD5 / Hidegadget (4.41)

Message par Ar-S »

Vous êtes au bureau et vous devez aller chercher un café très urgent mais pour ne pas perdre une seconde, vous n'avez pas l'intention
de fermer le programme, vais vous ne souhaitez pas non plus que les passant voient les données resté à l'écran....
Diantre, mais que faire ? Verrouillons notre logiciel le temps de notre absence.
Verrouillage Simple d'un logiciel via MD5 et l'utilisation de hidegadget()
Réalisé en PB 4.41

Voyons les procédures que nous allons utiliser

PrefPass()
Cette procédure va nous permettre de vérifier si un fichier "préférence" contenant un mot de passe existe.
S'il n'existe pas, on va le signaler au programme avec FIRSTLAUNCH=1

Code : Tout sélectionner

Procedure PrefPass()
  If OpenPreferences(pref$)
    PreferenceGroup("pass")
    userPass=ReadPreferenceString("X","")
    ClosePreferences()
    FIRSTLAUNCH=0
  Else
    FIRSTLAUNCH=1
  EndIf
EndProcedure
CreatePass()
Cette procédure permet de créer le fichier de préférence et d'inscrire le mot de passe dedans.
Elle s'exécutera uniquement si FIRSTLAUNCH=1

Code : Tout sélectionner

Procedure CreatePass()
  userPass=InputRequester("First Launch","Enter a main password","")
  If userPass=""
    MessageRequester("Error","You have to choose a password ! End of the program",#MB_ICONWARNING)
    End
  Else
    userPass=MD5Fingerprint(@userPass, Len(userPass)) ; Signature md5 du mot de passe
    ;On inscrit me MD5 dans le fichier pref
    CreatePreferences(pref$)
    PreferenceGroup("pass")
    WritePreferenceString("X",userPass)
    userPass=ReadPreferenceString("X","")
    ClosePreferences()
    ; -----------------------------------------
    MessageRequester("OK","Password has been saved")

    ; On dit au programme qu'il n'a plus a créer de mot de passe
    FIRSTLAUNCH=0
  EndIf
EndProcedure
Enfin, Protect()
Elle permet de verrouiller ou non le programme en cachant les gadgets à protéger.
On compare le md5 du mot de passe entré par l'utilisateur à celui du fichier pref$.
S'ils sont identiques, on déverrouille le programme.

Code : Tout sélectionner

Procedure Protect()
  Test.s=GetGadgetText(#BT_LOCK)
  If Test="LOCK"
    HideGadget(#GADG,1)
    txtlock="UNLOCK"
    HideGadget(#Text_12,0)
    HideGadget(#String_11,0)
    SetGadgetText(#BT_LOCK,txtlock)
    SetGadgetText(#String_11,"")
  ElseIf Test="UNLOCK"
    PrefPass()
    pass$=GetGadgetText(#String_11)
    pass$=MD5Fingerprint(@pass$, Len(pass$))
    Debug "md5 pass$ : "+pass$
    If pass$=""
      MessageRequester(" ","You have to enter a password !",$50)
      SetGadgetText(#String_11,"")
    ElseIf pass$=userPass
      HideGadget(#GADG,0)
      txtlock="LOCK"
      HideGadget(#Text_12,1)
      HideGadget(#String_11,1)
      SetGadgetText(#BT_LOCK,txtlock)
    Else
      MessageRequester(" ","Wrong Password",#MB_ICONWARNING)
      SetGadgetText(#String_11,"")
      SetGadgetState(#String_11,1)
    EndIf
  EndIf
EndProcedure
Voilà le programme dans sa totalité

Code : Tout sélectionner

; Simple MD5 Password protection to lock/unlock a software
; by Ar-S / 2010 - PB4.41

Enumeration
  #Window_0
  #BT_LOCK
  #GADG
  #Button_6
  #Button_8
  #Button_9
  #Editor_10
  #String_11
  #Text_12
EndEnumeration

Global txtlock.s
Global path$=GetCurrentDirectory()
Global pref$=pref$+"prefpass.txt"
Global FIRSTLAUNCH,userPass.s
txtlock="LOCK"

; ---- LES PROCEDURES --------

Procedure PrefPass()
  If OpenPreferences(pref$)
    PreferenceGroup("pass")
    userPass=ReadPreferenceString("X","")
    ClosePreferences()
    FIRSTLAUNCH=0
  Else
    FIRSTLAUNCH=1
  EndIf
EndProcedure
  
Procedure CreatePass()
  userPass=InputRequester("First Launch","Enter a main password","")
  If userPass=""
    MessageRequester("Error","You have to choose a password ! End of the program",#MB_ICONWARNING)
    End
  Else
    userPass=MD5Fingerprint(@userPass, Len(userPass)) ; Signature md5 du mot de passe
    ;On inscrit me MD5 dans le fichier pref
    CreatePreferences(pref$)
    PreferenceGroup("pass")
    WritePreferenceString("X",userPass)
    userPass=ReadPreferenceString("X","")
    ClosePreferences()
    ; 
    MessageRequester("OK","Password has been saved")
    
    ; On dit au programme qu'il n'a plus a créer de mot de passe
    FIRSTLAUNCH=0
  EndIf
EndProcedure

Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 602, 283, 400, 400, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    ButtonGadget(#BT_LOCK, 20, 365, 365, 25,txtlock )
    StringGadget(#String_11, 25, 338, 350, 25, "", #PB_String_Password|#ES_CENTER)
    TextGadget(#Text_12, 30, 314, 340, 20, "Enter Password to unlock the sofware", #PB_Text_Center)
    ContainerGadget(#GADG, 25, 80, 350, 220, #PB_Container_Raised)
      ButtonGadget(#Button_6, 15, 10, 130, 55, "Gadget_x")
      ButtonGadget(#Button_8, 15, 75, 130, 55, "Gadget_y")
      ButtonGadget(#Button_9, 15, 140, 130, 55, "Gadget_z")
      EditorGadget(#Editor_10, 150, 15, 185, 180)
      
      HideGadget(#Text_12,1)
      HideGadget(#String_11,1)
    CloseGadgetList()
  EndIf
EndProcedure
    
Procedure Protect()
  Test.s=GetGadgetText(#BT_LOCK)
  If Test="LOCK"
    HideGadget(#GADG,1)
    txtlock="UNLOCK"
    HideGadget(#Text_12,0)
    HideGadget(#String_11,0)
    SetGadgetText(#BT_LOCK,txtlock)
    SetGadgetText(#String_11,"")
  ElseIf Test="UNLOCK"
    PrefPass()
    pass$=GetGadgetText(#String_11)
    pass$=MD5Fingerprint(@pass$, Len(pass$))
    Debug "md5 pass$ : "+pass$
    If pass$=""
      MessageRequester(" ","You have to enter a password !",$50) ; $50 sert à faire afficher un messagerequester simple sans son ni icone
      SetGadgetText(#String_11,"")
    ElseIf pass$=userPass
      HideGadget(#GADG,0)
      txtlock="LOCK"
      HideGadget(#Text_12,1)
      HideGadget(#String_11,1)
      SetGadgetText(#BT_LOCK,txtlock)
    Else
      MessageRequester(" ","Wrong Password",#MB_ICONWARNING)
      SetGadgetText(#String_11,"")
      SetGadgetState(#String_11,1)
    EndIf
  EndIf
EndProcedure
    
; ---- LE PROGRAMME --------

; 1 - On vréfifie si le fichierPref existe
PrefPass()
; 2 - s'il n'existe pas on le créé
If FIRSTLAUNCH=1
  CreatePass()
EndIf

OpenWindow_Window_0()

; ---- Boulce d'évènements  --------
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #BT_LOCK
          Protect()
      EndSelect
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Window_0
          CloseWindow(#Window_0)
          Break
      EndSelect
  EndSelect
ForEver
Voilà, j'espère que ce tuto vous aura plu.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels