begin process at 2010 02 10 01:07:23
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité

 > GÉNÉRATEUR DE MOT DE PASSE [ALEATOIREMENT OU PAR ALGORITHME + DECODAGE] [NOMBRES, LETTRES (MINUSCULES ET MAJUSCULES)]

GÉNÉRATEUR DE MOT DE PASSE [ALEATOIREMENT OU PAR ALGORITHME + DECODAGE] [NOMBRES, LETTRES (MINUSCULES ET MAJUSCULES)]


 Information sur la source

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Sécurité Source .NET ( DotNet ) Niveau :Débutant Date de création :11/07/2003 Date de mise à jour :13/07/2003 11:52:52 Vu / téléchargé :13 762 / 744

Auteur : jefftabasco

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Comme son nom l'indique cette source permet de générer un mot de passe.

2 modes de génération : Aléatoire et par algorithme interne

En aléatoire:
On peut choisir le nombres de caractères à générer, si on veut des nombre, des lettre ou les 2 et si on veut que ce soir en minuscule, majuscules ou les 2.

Par algorithme :
Les lettre (minuscules et majuscules) et les nombres sont imposés.
On peut aussi decoder le code en appliquant l'algorithme inverse.


C'est une source assez bateau mais ça  peut etre pratique.

C 'est la première source que je poste alors restez indulgents svp !  

Source

  • Public Class Form1
  • Inherits System.Windows.Forms.Form
  • '---En général--------------
  • Dim lonMaxChar As Long = 10 'Nombre de caratère a tirer (ici fixé à 10 au démarrage)
  • Dim lonMinChar As Long = 10 'Nombre de caratère a tirer au minimum (ici fixé à 10 au démarrage)
  • Dim strKey As String 'chaine comportant le code généré
  • Dim booIsMin As Boolean = False ' boolean indiquant si il y a un minimum de caratère voulu ou pas
  • Dim booIsAlgo As Boolean = False ' boolean indiquant si on génère le mot de passe grace à la fonction algoritmique
  • Dim strPassphrase As String = "passphrase" ' contient la passphrase de base pour générer le mot de passe
  • Dim lonAlgo As Long 'contient un nombre obtenu lors de la génération algo
  • '---Pour les fonctions--------------
  • Dim booIsLetter As Boolean = True
  • Dim booIsLetterMin As Boolean = True
  • Dim booIsLetterMaj As Boolean = True
  • Dim booIsNumber As Boolean = True
  • '---Pour le tirage-------------------
  • Dim lonDeterminLetterOrNumber As Long ' variant entre 1 et 2 (entiers) il determine si on tire une lettre ou un nombre
  • Dim lonLetter As Long 'n° ascii tiré au hasard pour determiner une lettre (entre 65 et 90)
  • Dim lonNumber ' entier entre 0 et 9
  • Dim lonMinOrMaj As Long ' variant entre 1 et 2 (entiers) il determine si on convertie la lettre précedement tirée en une minuscules ou en une majuscule
  • '---Pour les stats-----------------------
  • Dim lonMin As Long = 0 'nbre de minuscules
  • Dim lonMaj As Long = 0 'nbre de majuscules
  • Dim lonNum As Long = 0 'nbre de nombres
  • Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
  • End
  • End Sub
  • Private Sub MenuItem5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem5.Click
  • Call btnGen_Click(0, e)
  • End Sub
  • Private Sub btnGen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGen.Click
  • If booIsAlgo = True Then
  • Call GenAlgo()
  • Exit Sub
  • End If
  • Dim x As Long
  • Dim lonExitChar As Long
  • Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
  • strKey = Nothing
  • txtKeybox.Clear()
  • prgBar.Maximum = lonMaxChar
  • StatusBar.Text = "Génération en cour..."
  • For x = 1 To lonMaxChar
  • If booIsLetter = True And booIsNumber = False Then ' si lettres et pas nombres
  • Call Letter()
  • Call MinOrMaj()
  • End If
  • If booIsLetter = False And booIsNumber = True Then 'si nombres et pas lettres
  • Call Number()
  • End If
  • If booIsLetter = True And booIsNumber = True Then ' si lettres et nombres...
  • Call LetterOrNumber() 'on choisit de tirer une lettre ou un nombre
  • If lonDeterminLetterOrNumber = 1 Then 'ici c une lettre qu'on tire
  • 'lettre
  • Call Letter()
  • Call MinOrMaj()
  • Else 'et pis la bah c un nombre...
  • 'nombre
  • Call Number()
  • End If
  • End If
  • Select Case booIsMin
  • Case Is = True
  • Select Case x
  • Case Is >= lonMinChar ' si on a atteint le nombre minimal de caratères voulu
  • Randomize()
  • lonExitChar = CInt((Int(2 * Rnd()) + 1))
  • Select Case lonExitChar 'on eput envisager de quitter la boucle
  • Case Is = 1 'bah pour une prochaine fois pe be
  • Exit Select
  • Case Is = 2 ' non on quitte
  • prgBar.Maximum = x
  • prgBar.Value = x
  • StatusBar.Text = "Compilation des éléments..." ' juste pcq ça met du temps a afficher le code généré
  • Exit For
  • End Select
  • Case Is < lonMinChar
  • Exit Select
  • End Select
  • Case Is = False
  • Exit Select
  • End Select
  • prgBar.Value = x
  • If x = lonMaxChar Then ' juste pcq ça met du temps a afficher le code généré
  • StatusBar.Text = "Compilation des éléments..."
  • End If
  • Next x
  • txtKeybox.Text = strKey
  • Cursor.Current = System.Windows.Forms.Cursors.Default
  • StatusBar.Text = "Génération terminée"
  • Call Stats()
  • End Sub
  • Private Function GenAlgo()
  • 'cette fonction est très peu dévellopé. Néenmmoin on peut entrevoir les base d'une génération de mot de passe en fct d'une string.
  • 'Comme je l'ai dit, le principe ici utilisé est relativement simple. Les nombres internes a la chaine obtenue apres génération sont constants (valeurs ascii + 32 +7) et les lettres aléatoires ne servent que de balises pour séparer les valeurs ascii dans le but d'un éventuel décodage du mot de passe et comparaison/analyse de la passphrase.
  • Dim x As Long
  • Dim strChar As String
  • Dim stralgo As String
  • Dim lonletter As Long
  • Dim lonMinOrMaj As Long
  • Dim strLetter As String
  • Dim y As Long
  • Dim lonCountBalises As Long
  • Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
  • txtKeybox.Clear()
  • lonMin = 0
  • lonMaj = 0
  • lonNum = 0
  • StatusBar.Text = "Génération en cour..."
  • prgBar.Maximum = Len(strPassphrase)
  • For x = 1 To Len(strPassphrase)
  • Randomize()
  • lonCountBalises = CInt((Int(3 * Rnd())) + 1)
  • For y = 1 To lonCountBalises
  • Randomize() ' tire une ou plusieur lettres balises au hazard
  • lonletter = CInt((Int(25 * Rnd()) + 0)) 'code ascii des touche alphabetiques de 65 à 90 (a=65 z=90) 'Ici utilisé pour séparer 2 valeur ascii l'une de l'autre
  • Randomize() ' determine si la lettre est minuscule ou majuscule. Juste pour faire ressortir un peu moin les valeurs ascii lors d'une comparaison de 2 passphrases par ex.
  • lonMinOrMaj = CInt((Int(2 * Rnd()) + 1))
  • Select Case lonMinOrMaj
  • Case Is = 1
  • Microsoft.VisualBasic.LCase(Chr(65 + lonletter))
  • lonMin = lonMin + 1
  • Case Is = 2
  • Microsoft.VisualBasic.UCase(Chr(65 + lonletter))
  • lonMaj = lonMaj + 1
  • End Select
  • strLetter = strLetter & (Chr(65 + lonletter))
  • Next y
  • strChar = Mid(strPassphrase, x, 1) ' obtient la lettre a convertir en code ascii
  • stralgo = stralgo & strLetter & (Asc(strChar) + 7) 'code formé de lettre balise + (valeur ascii + 32 +7)... et ainsi de suite
  • strLetter = Nothing
  • prgBar.Value = x 'mise a jour de la progressbar
  • If x = Len(strPassphrase) Then ' juste pcq ça met du temps a afficher le code généré
  • StatusBar.Text = "Compilation des éléments..."
  • End If
  • Next x
  • txtKeybox.Text = stralgo ' affihe le resultat obtenu a partir de la passphrase
  • strKey = stralgo
  • stralgo = Nothing
  • StatusBar.Text = "Génération terminée"
  • Cursor.Current = System.Windows.Forms.Cursors.Default
  • Call Stats()
  • End Function
  • Private Function decod()
  • ' ici on essais d'obtenir la passphrase originale a partir du code.
  • 'comme les lettres ne sont la que pour délimiter les valeurs ascii (nombres) on va juste extraire les groupes de nombres, en convertissant chaque groupe en sont caractère ascii et ainsi récupérer le passphrase original.
  • Dim x As Long
  • Dim LonLenStringNumeric As Long
  • Dim strStringNumeric As String
  • Dim booIsNumeric As Boolean = False
  • Dim strDecodKey As String
  • Dim booAddDecod As Boolean = False
  • Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
  • 'si le code ne se termine pas par une ou plusieur lettres, la derrnière valeur ascii ne va pas etre extraite. Donc on rajoute simplement une lettre au code, pas ex "A".
  • strKey = txtAlgo.Text
  • strKey = strKey & "a"
  • StatusBar.Text = "Décodage en cour..."
  • prgBar.Maximum = Len(strKey)
  • txtKeybox.Clear()
  • For x = 1 To Len(strKey)
  • If IsNumeric(Mid(strKey, x, 1)) = True Then 'si on est sur un groupe de nombres
  • booIsNumeric = True
  • booAddDecod = True
  • strStringNumeric = strStringNumeric & Mid(strKey, x, 1) 'on stock le groupe ds une autre chaine
  • Else
  • If booAddDecod = True Then
  • strDecodKey = strDecodKey & Chr(Val(strStringNumeric) - 7) 'la passphrase d'origine est obtenue en concaténant caractères obtenus par "les groupes ascii"
  • strStringNumeric = Nothing
  • booAddDecod = False ' devient tt de suite faut pour empecher de répéter l'opération tant qu'on analyse pas des nombres
  • End If
  • End If
  • prgBar.Value = x 'mise a jour de la progressbar
  • If x = Len(strKey) Then ' juste pcq ça met du temps a afficher le code généré
  • StatusBar.Text = "Compilation des éléments..."
  • End If
  • Next x
  • txtKeybox.Text = strDecodKey
  • StatusBar.Text = "Décodage terminé"
  • Call Stats()
  • Cursor.Current = System.Windows.Forms.Cursors.Default
  • End Function
  • Private Function Stats()
  • Dim x As Long
  • Dim lonCombi As Long
  • Dim lontotnum As Long
  • ' s'occupe d'afficher les statistiques
  • Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
  • StatusBar.Text = "Calcul des statistiques et informations en cour..."
  • prgBar.Maximum = Len(strKey)
  • lblTotChar.Text = "Caractère(s) : " & Len(strKey)
  • lblTotLetter.Text = "Lettre(s): " & (lonMin + lonMaj) & " (" & lonMin & " " & "min. et" & " " & lonMaj & " " & "maj." & ")"
  • For x = 1 To Len(strKey)
  • prgBar.Value = x
  • If IsNumeric(Mid(strKey, x, 1)) = True Then
  • lontotnum = lontotnum + 1
  • End If
  • Next x
  • lblTotNumber.Text = "Nombre(s): " & lontotnum
  • Try
  • lonCombi = ((lonMin + lonMaj) ^ 50) + (lonNum ^ 10)
  • 'lblCombi.Text = "Combinaisons possibles : " & (lonMin + lonMaj) & "^50" & " + " & lonNum & "^10"
  • lblCombi.Text = "Combinaisons possibles : " & lonCombi
  • Catch err As Exception ' ici on evite l'erreur de dépassement de capacité car une variable de type LONG ne peux atteidre une valeur max que de 9223372036854775807
  • If lonCombi >= 9223372036854775806 Then
  • lblCombi.Text = "Combinaisons possibles : > 9223372036854775807"
  • Else
  • lblCombi.Text = "Combinaisons possibles : [Dépassement de capacité]" 'idealement il faudrait jouer sur l'exposant. Mais en attendant...
  • End If
  • End Try
  • ' on purge le nombre de lettre et de nombre pour qu'il soit egal à 0 pour le prochain tirage
  • lonNum = 0
  • lonMin = 0
  • lonMaj = 0
  • Cursor.Current = System.Windows.Forms.Cursors.Default
  • StatusBar.Text = "Calcul des statistiques et informations terminé"
  • End Function
  • Private Function MinOrMaj()
  • If booIsLetterMaj = True And booIsLetterMin = False Then
  • strKey = strKey & Microsoft.VisualBasic.UCase(Chr(65 + lonLetter))
  • lonMaj = lonMaj + 1 'compte de nombre de maj pour les stats
  • Exit Function
  • End If
  • If booIsLetterMaj = False And booIsLetterMin = True Then
  • strKey = strKey & Microsoft.VisualBasic.LCase(Chr(65 + lonLetter))
  • lonMin = lonMin + 1 'compte le nombre de min
  • Exit Function
  • End If
  • If booIsLetterMaj = True And booIsLetterMin = True Then
  • Randomize() ' determine si la lettre est minuscule ou majuscule
  • lonMinOrMaj = CInt((Int(2 * Rnd()) + 1))
  • Select Case lonMinOrMaj
  • Case Is = 1
  • strKey = strKey & Microsoft.VisualBasic.LCase(Chr(65 + lonLetter))
  • lonMin = lonMin + 1
  • Case Is = 2
  • strKey = strKey & Microsoft.VisualBasic.UCase(Chr(65 + lonLetter))
  • lonMaj = lonMaj + 1
  • End Select
  • End If
  • End Function
  • Private Function Number()
  • 'tire un nombre au hazard
  • Randomize(lonNumber)
  • lonNumber = CInt((Int(10 * Rnd()) + 0))
  • strKey = strKey & lonNumber
  • lonNum = lonNum + 1
  • End Function
  • Private Function Letter()
  • Randomize() ' tire une lettre au hazard
  • lonLetter = CInt((Int(25 * Rnd()) + 0)) 'code ascii des touche alphabetiques de 65 à 90 (a=65 z=90)
  • End Function
  • Private Function LetterOrNumber()
  • Randomize() ' determine si lettre ou chiffre a tirer 1=lettre 2=nombre
  • lonDeterminLetterOrNumber = CInt((Int(2 * Rnd()) + 1))
  • End Function
  • Private Sub txtMaxChar_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtMaxChar.TextChanged
  • Select Case txtMaxChar.Text
  • Case Is = Nothing
  • lonMaxChar = 0 'empeche d'avoir un nombre de caratères maximum = à rien et donc de générer une erreur
  • Case Is <> Nothing
  • lonMaxChar = txtMaxChar.Text
  • If lonMaxChar > 32767 Then ' G limité a 32767 caratères pcq la txtKeyBox est limitée a 32767 caractères et que je voulais imosé un max. Mais y a déja po mal de marge pour un simple mot de passe.
  • lonMaxChar = 32767
  • txtMaxChar.Text = lonMaxChar
  • End If
  • End Select
  • End Sub
  • Private Sub txtMaxChar_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtMaxChar.Leave
  • Select Case txtMaxChar.Text
  • Case Is = Nothing
  • lonMaxChar = 0
  • txtMaxChar.Text = lonMaxChar 'empeche d'avoir un nombre de caratères maximum = à rien et donc de générer une erreur
  • txtMaxChar.SelectionStart = 1
  • Case Is <> Nothing
  • lonMinChar = txtMinChar.Text
  • If lonMaxChar > 32767 Then
  • lonMaxChar = 32767
  • txtMaxChar.Text = lonMaxChar
  • End If
  • End Select
  • End Sub
  • Private Sub txtMinChar_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtMinChar.TextChanged
  • Select Case txtMinChar.Text
  • Case Is = Nothing
  • lonMinChar = 0 'empeche d'avoir un nombre de caratères minimum = à rien et donc de générer une erreur
  • Case Is <> Nothing
  • lonMinChar = txtMinChar.Text
  • If lonMinChar > 32767 Then
  • lonMinChar = 32767
  • txtMinChar.Text = lonMaxChar
  • End If
  • End Select
  • End Sub
  • Private Sub txtMinChar_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtMinChar.Leave
  • Select Case txtMinChar.Text
  • Case Is = Nothing
  • lonMinChar = 0
  • txtMinChar.Text = lonMinChar 'empeche d'avoir un nombre de caratères minimum = à rien et donc de générer une erreur
  • txtMinChar.SelectionStart = 1
  • Case Is <> Nothing
  • lonMinChar = txtMinChar.Text
  • If lonMinChar > 32767 Then
  • lonMinChar = 32767
  • txtMinChar.Text = lonMaxChar
  • End If
  • End Select
  • End Sub
  • Private Sub txtAlgo_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtAlgo.TextChanged
  • Select Case txtAlgo.Text
  • Case Is = Nothing
  • strPassphrase = " " 'empeche d'avoir une passphrase = à rien et donc de générer une erreur
  • Case Is <> Nothing
  • strPassphrase = txtAlgo.Text
  • If Len(strPassphrase) > 800 Then 'au cas ou qq qui a du temps à perdre rentrerai un mot de passe trop gros...
  • strPassphrase = Microsoft.VisualBasic.Left(strPassphrase, 800)
  • txtAlgo.Text = strPassphrase
  • End If
  • End Select
  • End Sub
  • Private Sub txtAlgo_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtAlgo.Leave
  • Select Case txtAlgo.Text
  • Case Is = Nothing
  • strPassphrase = " "
  • txtAlgo.Text = strPassphrase 'empeche d'avoir un nombre de caratères minimum = à rien et donc de générer une erreur
  • txtAlgo.SelectionStart = 1
  • Case Is <> Nothing
  • strPassphrase = txtAlgo.Text
  • If Len(strPassphrase) > 800 Then 'au cas ou qq qui a du temps à perdre rentrerai un mot de passe trop gros...
  • strPassphrase = Microsoft.VisualBasic.Left(strPassphrase, 800)
  • txtAlgo.Text = strPassphrase
  • End If
  • End Select
  • End Sub
  • Private Sub btnCopy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCopy.Click
  • ' met le code en mémoire
  • Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
  • StatusBar.Text = "Mise en mémoire du mot de passe"
  • Clipboard.SetDataObject(strKey)
  • Cursor.Current = System.Windows.Forms.Cursors.Default
  • StatusBar.Text = "Mot de passe en mémoire"
  • End Sub
  • Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
  • ' efface la mémoire (met un espace en fait) et la txtKeybox
  • Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
  • StatusBar.Text = "Effaçement du mot de passe et/ou de la mémoire"
  • txtKeybox.Clear()
  • txtAlgo.Text = Nothing
  • strKey = Nothing
  • Clipboard.SetDataObject(" ")
  • Cursor.Current = System.Windows.Forms.Cursors.Default
  • StatusBar.Text = "Effacement terminé"
  • End Sub
  • Private Sub chkMinChar_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMinChar.CheckedChanged
  • 'True ou False, indique si il y a une possibilité minimum de caractères a tirer ou pas
  • booIsMin = chkMinChar.Checked
  • End Sub
  • Private Sub chkNumber_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkNumber.CheckedChanged
  • ' on choisi de tirer juste de nombres
  • booIsNumber = True
  • booIsLetter = False
  • End Sub
  • Private Sub chkLetter_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkLetter.CheckedChanged
  • ' on choisi de tirer juste des lettres
  • booIsLetter = True
  • booIsNumber = False
  • End Sub
  • Private Sub chkNumberLetter_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkNumberLetter.CheckedChanged
  • ' on choisi de tirer des nombres et des lettres
  • booIsNumber = True
  • booIsLetter = True
  • End Sub
  • Private Sub chkLetterMin_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkLetterMin.CheckedChanged
  • 'on choisi d'avoir que des lettres minuscules
  • booIsLetterMin = True
  • booIsLetterMaj = False
  • End Sub
  • Private Sub chkLetterMaj_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkLetterMaj.CheckedChanged
  • ' on choisi d'avoir que des lettres majuscules
  • booIsLetterMaj = True
  • booIsLetterMin = False
  • End Sub
  • Private Sub chkLetterMinMaj_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkLetterMinMaj.CheckedChanged
  • ' on choisit d'avoir des lettres minuscules et majuscules
  • booIsLetterMin = True
  • booIsLetterMaj = True
  • End Sub
  • Private Sub MenuItem4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem4.Click
  • 'affiche le form "a propos" (juste pour le fun :|)
  • Dim form2 As Form
  • form2 = New Form2()
  • form2.Show()
  • End Sub
  • Private Sub chkAlgo_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkAlgo.CheckedChanged
  • 'True ou False, indique si le mot de passe est généré a partir de la passphrase
  • booIsAlgo = chkAlgo.Checked
  • If chkAlgo.Checked = True Then
  • GroupBox8.Enabled = False
  • GroupBox5.Enabled = False
  • Else
  • GroupBox8.Enabled = True
  • GroupBox5.Enabled = True
  • End If
  • End Sub
  • Private Sub btnDecod_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDecod.Click
  • If chkAlgo.Checked = True Then
  • Call decod()
  • Else
  • MsgBox("Pour générer la passphrase d'un code saisi " & Chr(13) & "vous devez être en mode" & Chr(13) & " Génération/Décodage Algorithmique.", MsgBoxStyle.Exclamation, "Attention")
  • End If
  • End Sub
  • End Class
Public Class Form1
    Inherits System.Windows.Forms.Form

    '---En général--------------
    Dim lonMaxChar As Long = 10 'Nombre de caratère a tirer (ici fixé à 10 au démarrage)
    Dim lonMinChar As Long = 10 'Nombre de caratère a tirer au minimum (ici fixé à 10 au démarrage)
    Dim strKey As String 'chaine comportant le code généré
    Dim booIsMin As Boolean = False ' boolean indiquant si il y a un minimum de caratère voulu ou pas
    Dim booIsAlgo As Boolean = False ' boolean indiquant si on génère le mot de passe grace à la fonction algoritmique
    Dim strPassphrase As String = "passphrase" ' contient la passphrase de base pour générer le mot de passe
    Dim lonAlgo As Long 'contient un nombre obtenu lors de la génération algo

    '---Pour les fonctions--------------
    Dim booIsLetter As Boolean = True
    Dim booIsLetterMin As Boolean = True
    Dim booIsLetterMaj As Boolean = True
    Dim booIsNumber As Boolean = True

    '---Pour le tirage-------------------
    Dim lonDeterminLetterOrNumber As Long ' variant entre 1 et 2 (entiers) il determine si on tire une lettre ou un nombre 
    Dim lonLetter As Long 'n° ascii tiré au hasard pour determiner une lettre (entre 65 et 90)
    Dim lonNumber ' entier entre 0 et 9
    Dim lonMinOrMaj As Long ' variant entre 1 et 2 (entiers) il determine si on convertie la lettre  précedement tirée en une minuscules ou en une majuscule

    '---Pour les stats-----------------------
    Dim lonMin As Long = 0 'nbre de minuscules
    Dim lonMaj As Long = 0 'nbre de majuscules
    Dim lonNum As Long = 0 'nbre de nombres

 Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
        End
    End Sub

    Private Sub MenuItem5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem5.Click
        Call btnGen_Click(0, e)
    End Sub


    

    Private Sub btnGen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGen.Click

        If booIsAlgo = True Then
            Call GenAlgo()
            Exit Sub
        End If

        Dim x As Long
        Dim lonExitChar As Long
        Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
        strKey = Nothing
        txtKeybox.Clear()
        prgBar.Maximum = lonMaxChar

        StatusBar.Text = "Génération en cour..."
        For x = 1 To lonMaxChar


            If booIsLetter = True And booIsNumber = False Then ' si lettres et pas nombres
                Call Letter()
                Call MinOrMaj()
            End If

            If booIsLetter = False And booIsNumber = True Then 'si nombres et pas lettres
                Call Number()
            End If

            If booIsLetter = True And booIsNumber = True Then ' si lettres et nombres...
                Call LetterOrNumber() 'on choisit de tirer une lettre ou un nombre
                If lonDeterminLetterOrNumber = 1 Then 'ici c une lettre qu'on tire
                    'lettre
                    Call Letter()
                    Call MinOrMaj()
                Else 'et pis la bah c un nombre...
                    'nombre
                    Call Number()
                End If
            End If


            Select Case booIsMin
                Case Is = True

                    Select Case x
                        Case Is >= lonMinChar ' si on a atteint le nombre minimal de caratères voulu
                            Randomize()
                            lonExitChar = CInt((Int(2 * Rnd()) + 1))
                            Select Case lonExitChar 'on eput envisager de quitter la boucle
                                Case Is = 1 'bah pour une prochaine fois pe be
                                    Exit Select
                                Case Is = 2 ' non on quitte
                                    prgBar.Maximum = x
                                    prgBar.Value = x
                                    StatusBar.Text = "Compilation des éléments..." ' juste pcq ça met du temps a afficher le code généré
                                    Exit For
                            End Select

                        Case Is < lonMinChar
                            Exit Select
                    End Select

                Case Is = False
                    Exit Select
            End Select

            prgBar.Value = x
            If x = lonMaxChar Then ' juste pcq ça met du temps a afficher le code généré
                StatusBar.Text = "Compilation des éléments..."
            End If
        Next x

        txtKeybox.Text = strKey
        Cursor.Current = System.Windows.Forms.Cursors.Default
        StatusBar.Text = "Génération terminée"
        Call Stats()
    End Sub

    Private Function GenAlgo()

        'cette fonction est très peu dévellopé. Néenmmoin on peut entrevoir les base d'une génération de mot de passe en fct d'une string.

        'Comme je l'ai dit, le principe ici utilisé est relativement simple. Les nombres internes a la chaine obtenue apres génération sont constants (valeurs ascii + 32 +7) et les lettres aléatoires ne servent que de balises pour séparer les valeurs ascii dans le but d'un éventuel décodage du mot de passe et comparaison/analyse de la passphrase.

        Dim x As Long
        Dim strChar As String
        Dim stralgo As String
        Dim lonletter As Long
        Dim lonMinOrMaj As Long
        Dim strLetter As String
        Dim y As Long
        Dim lonCountBalises As Long


        Cursor.Current = System.Windows.Forms.Cursors.WaitCursor

        txtKeybox.Clear()
        lonMin = 0
        lonMaj = 0
        lonNum = 0

        StatusBar.Text = "Génération en cour..."
        prgBar.Maximum = Len(strPassphrase)

        For x = 1 To Len(strPassphrase)

            Randomize()
            lonCountBalises = CInt((Int(3 * Rnd())) + 1)
            For y = 1 To lonCountBalises
                Randomize() ' tire une ou plusieur lettres balises au hazard 
                lonletter = CInt((Int(25 * Rnd()) + 0)) 'code ascii des touche alphabetiques de 65 à 90 (a=65 z=90) 'Ici utilisé pour séparer 2 valeur ascii l'une de l'autre
                Randomize() ' determine si la lettre est minuscule ou majuscule. Juste pour faire ressortir un peu moin les valeurs ascii lors d'une comparaison de 2 passphrases par ex.
                lonMinOrMaj = CInt((Int(2 * Rnd()) + 1))
                Select Case lonMinOrMaj
                    Case Is = 1
                        Microsoft.VisualBasic.LCase(Chr(65 + lonletter))
                        lonMin = lonMin + 1
                    Case Is = 2
                        Microsoft.VisualBasic.UCase(Chr(65 + lonletter))
                        lonMaj = lonMaj + 1
                End Select
                strLetter = strLetter & (Chr(65 + lonletter))
            Next y



            strChar = Mid(strPassphrase, x, 1) ' obtient la lettre a convertir en code ascii
            stralgo = stralgo & strLetter & (Asc(strChar) + 7) 'code formé de lettre balise + (valeur ascii + 32 +7)... et ainsi de suite
            strLetter = Nothing


            prgBar.Value = x 'mise a jour de la progressbar
            If x = Len(strPassphrase) Then ' juste pcq ça met du temps a afficher le code généré
                StatusBar.Text = "Compilation des éléments..."
            End If
        Next x
        txtKeybox.Text = stralgo ' affihe le resultat obtenu a partir de la passphrase
        strKey = stralgo
        stralgo = Nothing
        StatusBar.Text = "Génération terminée"
        Cursor.Current = System.Windows.Forms.Cursors.Default
        Call Stats()

    End Function


    Private Function decod()

        ' ici on essais d'obtenir la passphrase originale a partir du code.
        'comme les lettres ne sont la que pour délimiter les valeurs ascii (nombres) on va juste extraire les groupes de nombres, en convertissant chaque groupe en sont caractère ascii et ainsi récupérer le passphrase original.

        Dim x As Long
        Dim LonLenStringNumeric As Long
        Dim strStringNumeric As String
        Dim booIsNumeric As Boolean = False
        Dim strDecodKey As String
        Dim booAddDecod As Boolean = False

        Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
        'si le code ne se termine pas par une ou plusieur lettres, la derrnière valeur ascii ne va pas etre extraite. Donc on rajoute simplement une lettre au code, pas ex "A".
        strKey = txtAlgo.Text
        strKey = strKey & "a"


        StatusBar.Text = "Décodage en cour..."
        prgBar.Maximum = Len(strKey)

        txtKeybox.Clear()


       
        For x = 1 To Len(strKey)


            If IsNumeric(Mid(strKey, x, 1)) = True Then 'si on est sur un groupe de nombres
                booIsNumeric = True
                booAddDecod = True
                strStringNumeric = strStringNumeric & Mid(strKey, x, 1) 'on stock le groupe ds une autre chaine
            Else
                If booAddDecod = True Then
                    strDecodKey = strDecodKey & Chr(Val(strStringNumeric) - 7) 'la passphrase d'origine est obtenue en concaténant caractères obtenus par "les groupes ascii"
                    strStringNumeric = Nothing
                    booAddDecod = False ' devient tt de suite faut pour empecher de répéter l'opération tant qu'on analyse pas des nombres
                End If

            End If


            prgBar.Value = x 'mise a jour de la progressbar
            If x = Len(strKey) Then ' juste pcq ça met du temps a afficher le code généré
                StatusBar.Text = "Compilation des éléments..."
            End If
        Next x

        txtKeybox.Text = strDecodKey
        StatusBar.Text = "Décodage terminé"

        Call Stats()
        Cursor.Current = System.Windows.Forms.Cursors.Default

    End Function


    Private Function Stats()
        Dim x As Long
        Dim lonCombi As Long
        Dim lontotnum As Long
        ' s'occupe d'afficher les statistiques

        Cursor.Current = System.Windows.Forms.Cursors.WaitCursor

        StatusBar.Text = "Calcul des statistiques et informations en cour..."
        prgBar.Maximum = Len(strKey)

        lblTotChar.Text = "Caractère(s) : " & Len(strKey)
        lblTotLetter.Text = "Lettre(s): " & (lonMin + lonMaj) & " (" & lonMin & " " & "min. et" & " " & lonMaj & " " & "maj." & ")"

        For x = 1 To Len(strKey)

            prgBar.Value = x

            If IsNumeric(Mid(strKey, x, 1)) = True Then
                lontotnum = lontotnum + 1
            End If
        Next x

        lblTotNumber.Text = "Nombre(s): " & lontotnum

        Try
            lonCombi = ((lonMin + lonMaj) ^ 50) + (lonNum ^ 10)
            'lblCombi.Text = "Combinaisons possibles : " & (lonMin + lonMaj) & "^50" & " + " & lonNum & "^10"
            lblCombi.Text = "Combinaisons possibles : " & lonCombi
        Catch err As Exception ' ici on evite l'erreur de dépassement de capacité car une variable de type LONG ne peux atteidre une valeur max que de 9223372036854775807
            If lonCombi >= 9223372036854775806 Then
                lblCombi.Text = "Combinaisons possibles : > 9223372036854775807"
            Else
                lblCombi.Text = "Combinaisons possibles : [Dépassement de capacité]" 'idealement il faudrait jouer sur l'exposant. Mais en attendant...
            End If
        End Try

        ' on purge le nombre de lettre et de nombre pour qu'il soit egal à 0 pour le prochain tirage
        lonNum = 0
        lonMin = 0
        lonMaj = 0

        Cursor.Current = System.Windows.Forms.Cursors.Default

        StatusBar.Text = "Calcul des statistiques et informations terminé"

    End Function

    Private Function MinOrMaj()
        If booIsLetterMaj = True And booIsLetterMin = False Then
            strKey = strKey & Microsoft.VisualBasic.UCase(Chr(65 + lonLetter))
            lonMaj = lonMaj + 1 'compte de nombre de maj pour les stats
            Exit Function
        End If
        If booIsLetterMaj = False And booIsLetterMin = True Then
            strKey = strKey & Microsoft.VisualBasic.LCase(Chr(65 + lonLetter))
            lonMin = lonMin + 1 'compte le nombre de min
            Exit Function
        End If

        If booIsLetterMaj = True And booIsLetterMin = True Then
            Randomize() ' determine si la lettre est minuscule ou majuscule
            lonMinOrMaj = CInt((Int(2 * Rnd()) + 1))
            Select Case lonMinOrMaj
                Case Is = 1
                    strKey = strKey & Microsoft.VisualBasic.LCase(Chr(65 + lonLetter))
                    lonMin = lonMin + 1
                Case Is = 2
                    strKey = strKey & Microsoft.VisualBasic.UCase(Chr(65 + lonLetter))
                    lonMaj = lonMaj + 1
            End Select
        End If
    End Function

    Private Function Number()
        'tire un nombre au hazard
        Randomize(lonNumber)
        lonNumber = CInt((Int(10 * Rnd()) + 0))
        strKey = strKey & lonNumber
        lonNum = lonNum + 1
    End Function

    Private Function Letter()
        Randomize() ' tire une lettre au hazard 
        lonLetter = CInt((Int(25 * Rnd()) + 0)) 'code ascii des touche alphabetiques de 65 à 90 (a=65 z=90)
    End Function

    Private Function LetterOrNumber()
        Randomize() ' determine si lettre ou chiffre a tirer 1=lettre 2=nombre
        lonDeterminLetterOrNumber = CInt((Int(2 * Rnd()) + 1))
    End Function


    Private Sub txtMaxChar_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtMaxChar.TextChanged
        Select Case txtMaxChar.Text
            Case Is = Nothing
                lonMaxChar = 0 'empeche d'avoir un nombre de caratères maximum = à rien et donc de générer une erreur
            Case Is <> Nothing
                lonMaxChar = txtMaxChar.Text
                If lonMaxChar > 32767 Then ' G limité a 32767 caratères pcq la txtKeyBox est limitée a 32767 caractères et que je voulais imosé un max. Mais y a déja po mal de marge pour un simple mot de passe.
                    lonMaxChar = 32767
                    txtMaxChar.Text = lonMaxChar
                End If
        End Select
    End Sub

    Private Sub txtMaxChar_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtMaxChar.Leave
        Select Case txtMaxChar.Text
            Case Is = Nothing
                lonMaxChar = 0
                txtMaxChar.Text = lonMaxChar 'empeche d'avoir un nombre de caratères maximum = à rien et donc de générer une erreur
                txtMaxChar.SelectionStart = 1
            Case Is <> Nothing
                lonMinChar = txtMinChar.Text
                If lonMaxChar > 32767 Then
                    lonMaxChar = 32767
                    txtMaxChar.Text = lonMaxChar
                End If
        End Select
    End Sub


    Private Sub txtMinChar_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtMinChar.TextChanged
        Select Case txtMinChar.Text
            Case Is = Nothing
                lonMinChar = 0 'empeche d'avoir un nombre de caratères minimum = à rien et donc de générer une erreur
            Case Is <> Nothing
                lonMinChar = txtMinChar.Text
                If lonMinChar > 32767 Then
                    lonMinChar = 32767
                    txtMinChar.Text = lonMaxChar
                End If
        End Select
    End Sub

    Private Sub txtMinChar_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtMinChar.Leave
        Select Case txtMinChar.Text
            Case Is = Nothing
                lonMinChar = 0
                txtMinChar.Text = lonMinChar 'empeche d'avoir un nombre de caratères minimum = à rien et donc de générer une erreur
                txtMinChar.SelectionStart = 1
            Case Is <> Nothing
                lonMinChar = txtMinChar.Text
                If lonMinChar > 32767 Then
                    lonMinChar = 32767
                    txtMinChar.Text = lonMaxChar
                End If
        End Select
    End Sub

    Private Sub txtAlgo_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtAlgo.TextChanged
        Select Case txtAlgo.Text
            Case Is = Nothing
                strPassphrase = " " 'empeche d'avoir une passphrase = à rien et donc de générer une erreur
            Case Is <> Nothing
                strPassphrase = txtAlgo.Text
                If Len(strPassphrase) > 800 Then 'au cas ou qq qui a du temps à perdre rentrerai un mot de passe trop gros...
                    strPassphrase = Microsoft.VisualBasic.Left(strPassphrase, 800)
                    txtAlgo.Text = strPassphrase
                End If
        End Select
    End Sub

    Private Sub txtAlgo_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtAlgo.Leave
        Select Case txtAlgo.Text
            Case Is = Nothing
                strPassphrase = " "
                txtAlgo.Text = strPassphrase 'empeche d'avoir un nombre de caratères minimum = à rien et donc de générer une erreur
                txtAlgo.SelectionStart = 1
            Case Is <> Nothing
                strPassphrase = txtAlgo.Text
                If Len(strPassphrase) > 800 Then 'au cas ou qq qui a du temps à perdre rentrerai un mot de passe trop gros...
                    strPassphrase = Microsoft.VisualBasic.Left(strPassphrase, 800)
                    txtAlgo.Text = strPassphrase
                End If
        End Select
    End Sub


    Private Sub btnCopy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCopy.Click
        ' met le code en mémoire
        Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
        StatusBar.Text = "Mise en mémoire du mot de passe"
        Clipboard.SetDataObject(strKey)
        Cursor.Current = System.Windows.Forms.Cursors.Default
        StatusBar.Text = "Mot de passe en mémoire"
    End Sub

    Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
        ' efface la mémoire (met un espace en fait) et la txtKeybox

        Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
        StatusBar.Text = "Effaçement du mot de passe et/ou de la mémoire"
        txtKeybox.Clear()
        txtAlgo.Text = Nothing
        strKey = Nothing
        Clipboard.SetDataObject(" ")

        Cursor.Current = System.Windows.Forms.Cursors.Default
        StatusBar.Text = "Effacement terminé"
    End Sub

    Private Sub chkMinChar_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMinChar.CheckedChanged
        'True ou False, indique si il y a une possibilité minimum de caractères a tirer ou pas
        booIsMin = chkMinChar.Checked
    End Sub


    Private Sub chkNumber_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkNumber.CheckedChanged
        ' on choisi de tirer juste de nombres
        booIsNumber = True
        booIsLetter = False
    End Sub

    Private Sub chkLetter_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkLetter.CheckedChanged
        ' on choisi de tirer juste des lettres
        booIsLetter = True
        booIsNumber = False
    End Sub

    Private Sub chkNumberLetter_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkNumberLetter.CheckedChanged
        ' on choisi de tirer des nombres et des lettres
        booIsNumber = True
        booIsLetter = True
    End Sub

    Private Sub chkLetterMin_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkLetterMin.CheckedChanged
        'on choisi d'avoir que des lettres minuscules
        booIsLetterMin = True
        booIsLetterMaj = False
    End Sub

    Private Sub chkLetterMaj_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkLetterMaj.CheckedChanged
        ' on choisi d'avoir que des lettres majuscules
        booIsLetterMaj = True
        booIsLetterMin = False
    End Sub

    Private Sub chkLetterMinMaj_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkLetterMinMaj.CheckedChanged
        ' on choisit d'avoir des lettres minuscules et majuscules
        booIsLetterMin = True
        booIsLetterMaj = True
    End Sub


    Private Sub MenuItem4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem4.Click
        'affiche le form "a propos" (juste pour le fun :|)
        Dim form2 As Form
        form2 = New Form2()
        form2.Show()
    End Sub



    Private Sub chkAlgo_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkAlgo.CheckedChanged
        'True ou False, indique si le mot de passe est généré a partir de la passphrase
        booIsAlgo = chkAlgo.Checked
        If chkAlgo.Checked = True Then
            GroupBox8.Enabled = False
            GroupBox5.Enabled = False
        Else
            GroupBox8.Enabled = True
            GroupBox5.Enabled = True
        End If
    End Sub

    Private Sub btnDecod_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDecod.Click
        If chkAlgo.Checked = True Then
            Call decod()
        Else
            MsgBox("Pour générer la passphrase d'un code saisi " & Chr(13) & "vous devez être en mode" & Chr(13) & " Génération/Décodage Algorithmique.", MsgBoxStyle.Exclamation, "Attention")
        End If
    End Sub
End Class
 

 Conclusion

On peut surrement pas mal amméliorer cette source notamment au niveau de des statistiques (combinaisons possible, ...) pcq actuellement je n'arrive pas à empecher un dépassement de capacité. Il y a surement moyen de jouer sur les exposants donc si vous avez une idée n'hésitéz pas.

Evitez les comentaires qui ne sont pas "constructifs" merci.  

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source .NET (Dotnet) TRANSPARENCE PARTIELLE ET BORDS IRRÉGULIERS EN .NET

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) APPARTENANCE AUX GROUPES DE SÉCURITÉ par legranche
Source avec Zip Source avec une capture Source .NET (Dotnet) REMOTE KEYLOGGER par elguevel
Source avec Zip PETITE IMPLEMENTATION DE L'ALGO SERVANT AU CRYPTAGE RSA par ccgousset
Source avec Zip SAUVEGARDES FICHIERS par claude440
Source avec Zip Source avec une capture VEROUX PC AVEC API par Galactus13

Commentaires et avis

Commentaire de SupraDolph le 12/07/2003 13:38:12

Et comme je l'es déjà dit sur le site il faudrai aussi l'algoritme qui permet de tester si le mot de passe a été généré par ton générateur ou inventé par quelqu'un(Sinon il reste un générateur inutilisable soit une fonction randimize).
Pour concrétiser ce que je dis je pourrai mettre le mien mais le problème c'est que je compte m'en servir et si je le donne je ne pourrai pas m'en servir.

sinon il est paramètrable et sa c'est un bon point.

Commentaire de jefftabasco le 12/07/2003 15:59:01

Ouep.
Je crois que .NET integre une fonction pour ça. C'est possible de signer ses mot de passes avec ?

Commentaire de jefftabasco le 13/07/2003 01:51:07

Bon en tout cas g créer une petite fonction algorithmique a titre d'exemple et sa fonction de décodage.

De plus j'ai amélioré quelques petites choses par-ci, par-là.

Commentaire de seif le 13/07/2003 21:06:35

le mien et plus facile qui pur presque le méme resultat ila génére assez biend des mot passe c vrai bien beuacoup de defaut mais pourqui ce compliqué la vie autant

Commentaire de codefan le 15/07/2003 11:24:09

Salut, pour une premiere, c tres bien continu !

Commentaire de Dri60 le 28/12/2007 12:03:33 9/10

Bonne Source, tu aurait pu également faire en sorte qu'il génére toute une liste.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales