Soyez le premier à donner votre avis sur cette source.
Vue 21 922 fois - Téléchargée 1 294 fois
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
12 juil. 2003 à 13:38
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.
12 juil. 2003 à 15:59
Je crois que .NET integre une fonction pour ça. C'est possible de signer ses mot de passes avec ?
13 juil. 2003 à 01:51
De plus j'ai amélioré quelques petites choses par-ci, par-là.
13 juil. 2003 à 21:06
28 déc. 2007 à 12:03
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.