Page 1 sur 1

Gestion utilisateur et sécurité

Publié : mar. 27/avr./2004 12:51
par Flype
j'ai besoin pour mon prog de gérer une liste d'utilisateurs avec pour chacun d'entre d'eux un mot de passe et des droits différents.

pour çà je créé un fichier .ini dans ce genre :

[USER]
user1;pass1;admin
user2;pass2;user
etc...

Mais le contenu de ce fichier étant sensible, le mieux est de le CRYPTER.
Ben justement. Comment ?

Il y a bien la commande Base64encoder().
Très bien mais comment je le décode car ya pas de Base64decoder()
On peut aussi pourquoi pas utiliser les commandes Packer() mais bon
compresser n'égal pas crypter.

bref probablement j'ai pas tout compris à la cipher lib, si quelqu'un aurait une idée à ce sujet ?

Publié : mar. 27/avr./2004 16:37
par cederavic
ben ça depend, si l'utilisateur DOIT rentrer le mot de passe (enfin l'utilisateur... j'en sais rien lol) mais si c'est seulement pour une verification de mot de passe, tu rentre le mot de passe crypter en md5 par exemple et il te suffit juste de faire un test if else endif entre le mot de passe du fichier et celui que "l'utiliateur" rentrer (biensur il faut le crypter pour faire le test)

Publié : mar. 27/avr./2004 18:05
par Flype
en gros tu as bien compris je crois
je vais voir avec ces commandes MD5, c un peu nouveau pour moi çà...
si je comprends rien, je te demanderais ;)

Publié : mar. 27/avr./2004 19:07
par cederavic
n'hesite pas :)

Publié : mar. 27/avr./2004 19:09
par cederavic
n'hesite pas :)

Publié : mar. 27/avr./2004 23:46
par Flype
je m'y suis mis et j'ai tout compris
pas de problème ;-)

Publié : mer. 28/avr./2004 12:39
par Flype
puisque j'ai tout compris peut etre je peux vous faire partager mon fichier include que je viens d'écrire. il permet de gérer une liste d'utilisateurs et de proposer une requête de Login. A savoir que le fichier utilisateur généré est crypté sur le disque dur ('users').
si vous voulez tester :
sauvegarder ses 3 sources dans un meme dossier,
puis lancer le 2/ puis le 3/

Il y a 3 sources:
1/ fichier include
2/ generation d'un fichier utilisateur
3/ requete de Login

Code : Tout sélectionner

;---------------------------------------------
;- FICHIER INCLUDE - GESTION DES UTILISATEURS
;---------------------------------------------

#USER_KEY = "kg"
#USER_SEP = ","
#USER_CSV = ";"

Enumeration ; Type d'utilisateur
  #USER_TYPE_GUEST
  #USER_TYPE_ADMIN
  #USER_TYPE_USER
EndEnumeration
Enumeration ; Gadgets pour la requête
  #USER_GAD_INFO
  #USER_GAD_NOM
  #USER_GAD_MDP
  #USER_GAD_OK
EndEnumeration

Structure USER
  type.b ; Invité, Utilisateur, Administrateur
  nom.s  ; Nom de l'utilisateur
  mdp.s  ; Mot de passe
EndStructure

NewList UserList.USER()

Procedure USER_ExisteDeja(nom.s)
  ForEach UserList()
    If UserList()\nom=nom
      ProcedureReturn #True
    EndIf
  Next
  ProcedureReturn #False
EndProcedure
Procedure USER_Ajouter(type.b,nom.s,mdp.s)
  If nom<>"" And mdp<>""
    If type>#USER_TYPE_GUEST
      If USER_ExisteDeja(nom)=#False
        AddElement(UserList())
        UserList()\type=type
        UserList()\nom=nom
        UserList()\mdp=DESFingerprint(mdp,#USER_KEY)
        ProcedureReturn #True
      EndIf
    EndIf
  EndIf
  ProcedureReturn #False
EndProcedure
Procedure USER_Identifier(nom.s,mdp.s)
  ForEach UserList()
    If UserList()\nom=nom
      If UserList()\mdp=DESFingerprint(mdp,#USER_KEY)
        ProcedureReturn UserList()\type
      EndIf
    EndIf
  Next
  ProcedureReturn #USER_TYPE_GUEST
EndProcedure
Procedure USER_Enregistrer(fichier.s)
  If CreatePack(fichier)
    ligne.s=""
    ForEach UserList()
      ligne+Str(UserList()\type)+#USER_SEP
      ligne+UserList()\nom+#USER_SEP
      ligne+UserList()\mdp+#USER_CSV
    Next
    AddPackMemory(@ligne,Len(ligne),9)
    ClosePack()
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure
Procedure USER_Charger(fichier.s)
  hFichier.l=OpenPack(fichier)
  If hFichier=#Null
    ProcedureReturn #False
  EndIf
  UserData$=PeekS(NextPackFile())
  ClearList(UserList())
  i=1
  Repeat
    ligne$=StringField(UserData$,i,#USER_CSV)
    If ligne$="" : Break : EndIf
    If AddElement(UserList())
      UserList()\type=Val(StringField(ligne$,1,#USER_SEP))
      UserList()\nom=StringField(ligne$,2,#USER_SEP)
      UserList()\mdp=StringField(ligne$,3,#USER_SEP)
    EndIf
    i+1
  ForEver
  ClosePack()
  ProcedureReturn #True
EndProcedure
Procedure USER_RemplirGadget(Gadget.l)
  ForEach UserList()
    AddGadgetItem(Gadget,-1,UserList()\nom)
  Next
EndProcedure
Procedure USER_Login(Titre.s)
  fenetre=OpenWindow(#PB_Any,0,0,255,75,#PB_Window_ScreenCentered,Titre)
  If fenetre=#Null
    ProcedureReturn #False
  EndIf
  ShowCloseButton(WindowID(),#True)
  MakeToolWindow(WindowID(),#True)
  MakeStayOnTop(WindowID(),#True)
  CreateGadgetList(WindowID())
  TextGadget(#USER_GAD_INFO,5,5,245,18,"Veuillez choisir votre nom dans la liste",#PB_Text_Center)
  ComboBoxGadget(#USER_GAD_NOM,5,25,120,100)
  StringGadget(#USER_GAD_MDP,130,25,120,21,"",#PB_String_Password)
  ButtonGadget(#USER_GAD_OK,98,52,60,21,"OK")
  police=LoadFont(#PB_Any,"Arial",8,#PB_Font_Bold)
  If police<>#Null
    SetGadgetFont(#USER_GAD_INFO,FontID())
    SetGadgetFont(#USER_GAD_OK,FontID())
  EndIf
  DisableGadget(#USER_GAD_OK,#True)
  USER_RemplirGadget(#USER_GAD_NOM)
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow : Break
      Case #PB_Event_Gadget
        Select EventGadgetID()
          Case #USER_GAD_OK : Break
          Case #USER_GAD_NOM
            If EventType()=1
              DisableGadget(#USER_GAD_OK,#True)
              SetGadgetText(#USER_GAD_MDP,"")
              SetGadgetText(#USER_GAD_INFO,"Veuillez saisir votre mot de passe")
            EndIf
        EndSelect
      Case 258
        Select USER_Identifier(GetGadgetText(#USER_GAD_NOM),GetGadgetText(#USER_GAD_MDP))
          Case #USER_TYPE_GUEST : SetGadgetText(#USER_GAD_INFO,"Utilisateur non identifié") : DisableGadget(#USER_GAD_OK,#True)
          Case #USER_TYPE_USER  : SetGadgetText(#USER_GAD_INFO,"Utilisateur identifié") : DisableGadget(#USER_GAD_OK,#False)
          Case #USER_TYPE_ADMIN : SetGadgetText(#USER_GAD_INFO,"Administrateur identifié") : DisableGadget(#USER_GAD_OK,#False)
        EndSelect
    EndSelect
  ForEver
  CloseFont(police)
  CloseWindow(fenetre)
EndProcedure

Code : Tout sélectionner

;---------------------------------------
; GENERE LE FICHIER UTILISATEUR
;---------------------------------------
IncludeFile "UserLib.pb"
USER_Ajouter(#USER_TYPE_ADMIN,"Flype","toto")
USER_Ajouter(#USER_TYPE_ADMIN,"Fred","pb")
USER_Ajouter(#USER_TYPE_USER,"Denis","riri")
USER_Ajouter(#USER_TYPE_USER,"Regis","fifi")
USER_Ajouter(#USER_TYPE_USER,"Cederavic","loulou")
USER_Enregistrer("users")

Code : Tout sélectionner

;--------------------------------
; LOGIN
;--------------------------------
IncludeFile "UserLib.pb"
USER_Charger("users")
USER_Login("Login")