Creation et gestion de compte utilisateur (haute securite , verification par hash)

Description

Le module "GESTION COMPTE" et le module de classe "MD5", permet à une application de créer et de gérer
des comptes utilisateur trés facilement.

possibilitées :

-créer un compte utilisateur avec (Nom utilisateur, mot de passe
, question et reponse secréte)
-verifier l'accés par nom d'utilisateur et mot de passe
-Demande de la question secréte par nom utilisateur
-verifier l'accés par nom d'utilisateur et reponse secréte
-modification du mot de passe d'un compte
-modification de la quetion/réponse d'un compte
-suppression d'un compte

Un compte tient dans un fichier, ce fichier est nommé du HASH du nom utilisateur + l'extension ".hist"
Ce fichier est caché dans un dossier qui sera crée au même endroit que l'éxecutable

le fichier contient :
le HASH du Nom d'utilisateur et la reponse secréte '(sur 32 octet)
la question secréte '(sur 256 octet)
le HASH du Nom d'utilisateur et mot de passe '(sur 32 octet)

lorsqu'un utilisateur veut accéder à son compte :

- il rentre son nom d'utilisateur et son mot de passe, grâce au module de classe
on HASH le nom d'utilisateur et le mot de passe et on le compare au HASH enregistré
dans le fichier utilisateur, si identique, l'utilisateur a accés

OU

- Il rentre son nom d'utilisateur et sa réponse secréte, grâce au module de classe
on HASH le tout et on verifie le HASH contenu dans le fichier utilisateur
si correct, l'utilisateur a accés

Le fait que les fichiers de sauvegarde des comptes ne comporte ni mot de passe
ni réponse secréte ni nom d'utilisateur en clair augmente grandement la sécurité.
toute les vérifications s'effectuent grâce aux comparaisons par HASH.

Source / Exemple :


Dim Questionmodule As String * 256
Dim HASH1 As String * 32
Dim HASH2 As String * 32
Dim HASH3 As String * 32
Dim HASH4 As String * 32
Dim HASH5 As String * 32
Dim buffer1 As String * 32
Dim buffer2 As String * 256
Dim HASH As clsMD5

Public Function EnregistreUtil(Utilisateur As String, pass As String, question As String, reponse As String)
Set HASH = New clsMD5 'procedure pour utiliser les fonctions du module de classe (CLSMD5)
File = FreeFile 'Obtenir un numero de fichier libre
Set objfso = CreateObject("Scripting.FileSystemObject") 'création de l'objet necessaire a la vérification de l'existence d'un fichier ou dossier
Questionmodule = question 'la question secréte et placer dans une variable string formater (256 octet)
HASH1 = HASH.DigestStrToHexStr(Utilisateur & pass) 'HASH résultant du Nom d'utilisateur et du mots de passe
HASH2 = HASH.DigestStrToHexStr(Utilisateur & reponse) ' HASH résultant de la question formater sur 256 octet et de la réponse
HASH3 = HASH.DigestStrToHexStr(Utilisateur) 'HASH résultant du nom de l'utilisateur
cheminFile = App.Path & "\hist.{BD84B380-8CA2-1069-AB1D-08000948F534}\" & HASH3 & ".hist" 'Chemin d'accer du fichier utilisateur a crée
Chemin = App.Path & "\hist.{BD84B380-8CA2-1069-AB1D-08000948F534}" 'Chemin d'accer du dossier ou l'on place le fichier utilisateur a crée
If Not objfso.FolderExists(Chemin) Then 'On verifie que le dossier existe, si il n'existe pas
objfso.CreateFolder (Chemin) '           on le crée
End If
If Not (objfso.FileExists(cheminFile)) Then 'On verifie que le fichier utilisateur que l'on va crée n'existe pas deja, dans quel cas, la fonction renvéra le message "Pseudo déja utilisée"
Open cheminFile For Binary As #File 'si le fichier n'existe pas, on le crée
Put #File, 1, HASH2 'On ecrit : 32 premier octet > HASH question, reponse
Put #File, 32 + 1, Questionmodule '256 octet suivant > question
Put #File, 32 + 256 + 1, HASH1 '32 octet suivant > HASH utilisateur & pass
Close #File
EnregistreUtil = "Utilisateur enregistrer" 'Message que renvéra la fonction
Else
EnregistreUtil = "Le pseudo et deja utilisée"
End If
End Function

Public Function LectureUtil(Mode As Integer, Utilisateur As String, Optional pass As String, Optional reponse As String)
'...........................................................................................
'...........................................................................................
''LES ENTREES :                                                                           ..
' Mode possible : - "1 + Utilisateur + pass"    - pour vérification                       ..
' Mode possible : - "2 + Utilisateur"           - pour demande de question secréte        ..
' Mode possible : - "3 + Utilisateur + reponse" - pour vérification par réponse secréte   ..
'                                                                                         ..
''LES SORTIES :                                                                           ..
'Mode 1 : - "0 ACCEPTER"                                                                  ..
'         - "1 REFUSER, MOTS DE PASS INCORRECT"                                           ..
'         - "4 refuser, il n'existe aucun trace de cette utilisateur"                     ..
'                                                                                         ..
'Mode 2 : - "2 CONTENUE DE LA REPONSE SECRETE"                                            ..
'         - "4 refuser, il n'existe aucun trace de cette utilisateur"                     ..
'                                                                                         ..
'Mode 3 : - "0 ACCEPTER"                                                                  ..
'         - "3 REFUSER REPONSE INCORRECTE"                                                ..
'...........................................................................................
'...........................................................................................

Set objfso = CreateObject("Scripting.FileSystemObject")
Set HASH = New clsMD5
File = FreeFile
HASH3 = HASH.DigestStrToHexStr(Utilisateur)
cheminFile = App.Path & "\hist.{BD84B380-8CA2-1069-AB1D-08000948F534}\" & HASH3 & ".hist"

If (objfso.FileExists(cheminFile)) Then
 Open cheminFile For Binary As #File
 
 Select Case Mode
 
  Case 1:
   Get #File, 32 + 256 + 1, buffer1
    If buffer1 = HASH.DigestStrToHexStr(Utilisateur & pass) Then
   LectureUtil = "0 Accepter"
    Else
   LectureUtil = "1 refuser, mots de pass incorrect"
    End If

  Case 2:
   Get #File, 32 + 1, buffer2
  LectureUtil = "2 " & Trim(buffer2)

  Case 3:
   Get #File, 1, buffer1
    If HASH.DigestStrToHexStr(Utilisateur & reponse) = buffer1 Then
   LectureUtil = "0 Accepter"
    Else
   LectureUtil = "3 refuser, réponse incorrecte"
    End If
  
  End Select

 Close #File

Else
 LectureUtil = "4 refuser, il n'existe aucun trace de cette utilisateur"
End If

End Function

Public Function ModifUtil(Mode As Byte, Utilisateur As String, pass As String, Optional Newpass As String, Optional question As String, Optional reponse As String)

'.............................
'.............................
'LES ENTREES :
' mode possible : 1 - "Utilisateur + pass + NewPass" changement de mots de passe
' mode possible : 2 - "Utilisateur + pass + question + reponse" changement de question/réponse

'LES SORTIES:
'mode 1 : -"2 UTILISATEUR INEXISTANT"
'         -"1 MOTS DE PASSE ERRONER"
'         -"0 NOUVEAU MOTS DE PASSE ACTIF"
'mode 2 : -"2 UTILISATEUR INEXISTANT"
'         -"1 MOTS DE PASSE ERRONER
'         -"0 NOUVELLE QUESTION/REPONSE ACTIF"

Set objfso = CreateObject("Scripting.FileSystemObject")
Set HASH = New clsMD5
File = FreeFile
HASH3 = HASH.DigestStrToHexStr(Utilisateur)
cheminFile = App.Path & "\hist.{BD84B380-8CA2-1069-AB1D-08000948F534}\" & HASH3 & ".hist"
HASH1 = HASH.DigestStrToHexStr(Utilisateur & pass)
HASH2 = HASH.DigestStrToHexStr(Utilisateur & Newpass)

If (objfso.FileExists(cheminFile)) Then
 
 Open cheminFile For Binary As #File

Get #File, 32 + 256 + 1, HASH4

 Select Case Mode

Case 1:

  If HASH4 = HASH1 Then
  Put #File, 32 + 256 + 1, HASH2
  ModifUtil = "0 Nouveau mots de passe actif"
  Else
  ModifUtil = "1 Mots de passe erroner"
  End If
  
 Case 2:
 
 HASH5 = HASH.DigestStrToHexStr(Utilisateur & reponse)
 
 If HASH4 = HASH1 Then
 Questionmodule = question
 Put #File, 1, HASH5
 Put #File, 32 + 1, Questionmodule
 
 ModifUtil = "0 Nouvelle question/reponse actif"
 Else
 ModifUtil = "1 Mots de passe erroner"
 End If
 
 End Select

Else
ModifUtil = "2 Utilisateur inexistant"
End If

Close #File
End Function

Conclusion :


cv

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.