Générateur de clés aléatoire

Description

On m'avait conseillé de faire un générateur de clés aléatoires lorsque j'en avais fait 1 où les clés étaient déjà définies...

Ben le voilà ce générateur !

Je vous cache pas que j'ai fait ce programme pour essayer de générer une clé pour un jeu (star wars galaxies).

Evidemment, mon seul but en déposant cette source, c'est pour aider...

Alors je vous explique les calculs :

j'ai d'abord additionné les code ASCII de toutes les lettres d'une clé valide, et ça a donné un nombre entre 1400 et 1500, pareil pour une 2° clé.
Je me suis donc dis que c'était pareil pour toutes les clés...

J'ai remarqué que le début des clés valides était "SW" (comme Star Wars)

Ensuite, j'ai décidé de mettre aléatoirement des chiffres et des lettres (par un simple calcul).

Et pour finir, j'ai additionné tous les codes ASCII des clés générées, et je vérifie qu'elle soient bien entre 1400 et 1500.

Source / Exemple :


'on déclare des nombres qui permettront d'avoir la valeur des clés en ASCII
Dim temp1 As Integer
Dim temp2 As Integer
Dim temp3 As Integer
Dim temp4 As Integer
Dim temp5 As Integer
Dim temp6 As Integer
Dim temp7 As Integer
Dim temp8 As Integer
Dim temp9 As Integer
Dim temp10 As Integer
Dim temp11 As Integer
Dim temp12 As Integer
Dim temp13 As Integer
Dim temp14 As Integer
Dim temp15 As Integer
Dim temp16 As Integer
Dim temp17 As Integer
Dim temp18 As Integer
Dim temp19 As Integer
Dim temp20 As Integer
'on déclare le nombre de lignes de list1
Dim number_list As Integer

Private Sub Label1_Click()
'Label nommé "PROCESS"
'on efface list1 (cela permet de générer des clés à l'infini)
List1.Clear
'On définit le nombre de lignes de list1
number_list = 0
'on montre à l'utilisateur que le processus est en train de se faire
MousePointer = vbHourglass
'On commence la boucle
Do
'on dé&finit la progression de la progressbar
ProgressBar1.Value = "0"
'on définit les 2 premiers caractères
Text1 = "S"
Text2 = "W"
'On génère un chiffre qui determinera si on met un chiffre ou une lettre
Randomize
dt_c = Int(Rnd * 2 + 1)
'Si il égale 0,
If dt_c = "0" Then
'on régénère le chiffre
Randomize
dt_c = Int(Rnd * 2 + 1)
End If
'Si il égale 1,
If dt_c = "1" Then
'alors on met une lettre
Randomize
'sachant que chr(65) = A (il faut des majuscules)
Text3 = Chr(Int(Rnd * 26) + 65) 'on génère une lettre de A à Z
Else
'Si il égale 2,
If dt_c = "2" Then
'alors on met un chiffre
Randomize
'sachant que chr(49) = 1
Text3 = Chr(Int(Rnd * 9) + 49) 'on génère un chiffre entre 1 et 9
End If
End If
'Si la zone de texte est vide au final (au cas où; ça peut arriver...),
If Text3 = "" Then
Randomize
'alors on génère un chiffre
Text3 = Chr(Int(Rnd * 9) + 49)
End If
'Puis on rédéfinit la progression de la progressbar
ProgressBar1.Value = "6"
'###
'VOILA, ON FAIT LA MÊME CHOSE POUR TOUTES LES AUTRES ZONES DE TEXTE
'###
Randomize
dt_c = Int(Rnd * 2 + 1)
If dt_c = "0" Then
Randomize
dt_c = Int(Rnd * 2 + 1)
End If
If dt_c = "1" Then
Randomize
Text4 = Chr(Int(Rnd * 26) + 65)
Else
If dt_c = "2" Then
Randomize
Text4 = Chr(Int(Rnd * 9) + 49)
End If
End If
If Text4 = "" Then
Randomize
Text4 = Chr(Int(Rnd * 9) + 49)
End If
ProgressBar1.Value = "12"
Randomize
dt_c = Int(Rnd * 2 + 1)
If dt_c = "0" Then
Randomize
dt_c = Int(Rnd * 2 + 1)
End If
If dt_c = "1" Then
Randomize
Text5 = Chr(Int(Rnd * 26) + 65)
Else
If dt_c = "2" Then
Randomize
Text5 = Chr(Int(Rnd * 9) + 49)
End If
End If
If Text5 = "" Then
Randomize
Text5 = Chr(Int(Rnd * 9) + 49)
End If
ProgressBar1.Value = "18"
Randomize
dt_c = Int(Rnd * 2 + 1)
If dt_c = "0" Then
Randomize
dt_c = Int(Rnd * 2 + 1)
End If
If dt_c = "1" Then
Randomize
Text6 = Chr(Int(Rnd * 26) + 65)
Else
If dt_c = "2" Then
Randomize
Text6 = Chr(Int(Rnd * 9) + 49)
End If
End If
If Text6 = "" Then
Randomize
Text6 = Chr(Int(Rnd * 9) + 49)
End If
ProgressBar1.Value = "24"
Randomize
dt_c = Int(Rnd * 2 + 1)
If dt_c = "0" Then
Randomize
dt_c = Int(Rnd * 2 + 1)
End If
If dt_c = "1" Then
Randomize
Text7 = Chr(Int(Rnd * 26) + 65)
Else
If dt_c = "2" Then
Randomize
Text7 = Chr(Int(Rnd * 9) + 49)
End If
End If
If Text7 = "" Then
Randomize
Text7 = Chr(Int(Rnd * 9) + 49)
End If
ProgressBar1.Value = "30"
Randomize
dt_c = Int(Rnd * 2 + 1)
If dt_c = "0" Then
Randomize
dt_c = Int(Rnd * 2 + 1)
End If
If dt_c = "1" Then
Randomize
Text8 = Chr(Int(Rnd * 26) + 65)
Else
If dt_c = "2" Then
Randomize
Text8 = Chr(Int(Rnd * 9) + 49)
End If
End If
If Text8 = "" Then
Randomize
Text8 = Chr(Int(Rnd * 9) + 49)
End If
ProgressBar1.Value = "36"
Randomize
dt_c = Int(Rnd * 2 + 1)
If dt_c = "0" Then
Randomize
dt_c = Int(Rnd * 2 + 1)
End If
If dt_c = "1" Then
Randomize
Text9 = Chr(Int(Rnd * 26) + 65)
Else
If dt_c = "2" Then
Randomize
Text9 = Chr(Int(Rnd * 9) + 49)
End If
End If
If Text9 = "" Then
Randomize
Text9 = Chr(Int(Rnd * 9) + 49)
End If
ProgressBar1.Value = "42"
Randomize
dt_c = Int(Rnd * 2 + 1)
If dt_c = "0" Then
Randomize
dt_c = Int(Rnd * 2 + 1)
End If
If dt_c = "1" Then
Randomize
Text10 = Chr(Int(Rnd * 26) + 65)
Else
If dt_c = "2" Then
Randomize
Text10 = Chr(Int(Rnd * 9) + 49)
End If
End If
If Text10 = "" Then
Randomize
Text10 = Chr(Int(Rnd * 9) + 49)
End If
ProgressBar1.Value = "48"
Randomize
dt_c = Int(Rnd * 2 + 1)
If dt_c = "0" Then
Randomize
dt_c = Int(Rnd * 2 + 1)
End If
If dt_c = "1" Then
Randomize
Text11 = Chr(Int(Rnd * 26) + 65)
Else
If dt_c = "2" Then
Randomize
Text11 = Chr(Int(Rnd * 9) + 49)
End If
End If
If Text11 = "" Then
Randomize
Text11 = Chr(Int(Rnd * 9) + 49)
End If
ProgressBar1.Value = "54"
Randomize
dt_c = Int(Rnd * 2 + 1)
If dt_c = "0" Then
Randomize
dt_c = Int(Rnd * 2 + 1)
End If
If dt_c = "1" Then
Randomize
Text12 = Chr(Int(Rnd * 26) + 65)
Else
If dt_c = "2" Then
Randomize
Text12 = Chr(Int(Rnd * 9) + 49)
End If
End If
If Text12 = "" Then
Randomize
Text12 = Chr(Int(Rnd * 9) + 49)
End If
ProgressBar1.Value = "60"
Randomize
dt_c = Int(Rnd * 2 + 1)
If dt_c = "0" Then
Randomize
dt_c = Int(Rnd * 2 + 1)
End If
If dt_c = "1" Then
Randomize
Text13 = Chr(Int(Rnd * 26) + 65)
Else
If dt_c = "2" Then
Randomize
Text13 = Chr(Int(Rnd * 9) + 49)
End If
End If
If Text13 = "" Then
Randomize
Text13 = Chr(Int(Rnd * 9) + 49)
End If
ProgressBar1.Value = "66"
Randomize
dt_c = Int(Rnd * 2 + 1)
If dt_c = "0" Then
Randomize
dt_c = Int(Rnd * 2 + 1)
End If
If dt_c = "1" Then
Randomize
Text14 = Chr(Int(Rnd * 26) + 65)
Else
If dt_c = "2" Then
Randomize
Text14 = Chr(Int(Rnd * 9) + 49)
End If
End If
If Text14 = "" Then
Randomize
Text14 = Chr(Int(Rnd * 9) + 49)
End If
ProgressBar1.Value = "72"
Randomize
dt_c = Int(Rnd * 2 + 1)
If dt_c = "0" Then
Randomize
dt_c = Int(Rnd * 2 + 1)
End If
If dt_c = "1" Then
Randomize
Text15 = Chr(Int(Rnd * 26) + 65)
Else
If dt_c = "2" Then
Randomize
Text15 = Chr(Int(Rnd * 9) + 49)
End If
End If
If Text15 = "" Then
Randomize
Text15 = Chr(Int(Rnd * 9) + 49)
End If
ProgressBar1.Value = "78"
Randomize
dt_c = Int(Rnd * 2 + 1)
If dt_c = "0" Then
Randomize
dt_c = Int(Rnd * 2 + 1)
End If
If dt_c = "1" Then
Randomize
Text16 = Chr(Int(Rnd * 26) + 65)
Else
If dt_c = "2" Then
Randomize
Text16 = Chr(Int(Rnd * 9) + 49)
End If
End If
If Text16 = "" Then
Randomize
Text16 = Chr(Int(Rnd * 9) + 49)
End If
ProgressBar1.Value = "84"
Randomize
dt_c = Int(Rnd * 2 + 1)
If dt_c = "0" Then
Randomize
dt_c = Int(Rnd * 2 + 1)
End If
If dt_c = "1" Then
Randomize
Text17 = Chr(Int(Rnd * 26) + 65)
Else
If dt_c = "2" Then
Randomize
Text17 = Chr(Int(Rnd * 9) + 49)
End If
End If
If Text17 = "" Then
Randomize
Text17 = Chr(Int(Rnd * 9) + 49)
End If
ProgressBar1.Value = "90"
Randomize
dt_c = Int(Rnd * 2 + 1)
If dt_c = "0" Then
Randomize
dt_c = Int(Rnd * 2 + 1)
End If
If dt_c = "1" Then
Randomize
Text18 = Chr(Int(Rnd * 26) + 65)
Else
If dt_c = "2" Then
Randomize
Text18 = Chr(Int(Rnd * 9) + 49)
End If
End If
If Text18 = "" Then
Randomize
Text18 = Chr(Int(Rnd * 9) + 49)
End If
ProgressBar1.Value = "96"
Randomize
dt_c = Int(Rnd * 2 + 1)
If dt_c = "0" Then
Randomize
dt_c = Int(Rnd * 2 + 1)
End If
If dt_c = "1" Then
Randomize
Text19 = Chr(Int(Rnd * 26) + 65)
Else
If dt_c = "2" Then
Randomize
Text19 = Chr(Int(Rnd * 9) + 49)
End If
End If
If Text19 = "" Then
Randomize
Text19 = Chr(Int(Rnd * 9) + 49)
End If
ProgressBar1.Value = "100"
Randomize
dt_c = Int(Rnd * 2 + 1)
If dt_c = "0" Then
Randomize
dt_c = Int(Rnd * 2 + 1)
End If
If dt_c = "1" Then
Randomize
Text20 = Chr(Int(Rnd * 26) + 65)
Else
If dt_c = "2" Then
Randomize
Text20 = Chr(Int(Rnd * 9) + 49)
End If
End If
If Text20 = "" Then
Randomize
Text20 = Chr(Int(Rnd * 9) + 49)
End If
'il y a 20 zones de texte :
'5 fois 4 caractères
'
'Puis on calcule le code ASCII de chaque caractère
'(n'oubliez pas qu'on les a défini en tant que Integer, ça va permettre
'de les additionner, et non pas de de tout mettre à la suite ;))
'
temp1 = Asc(Text1) 'temp1 = le code ASCII de text1
temp2 = Asc(Text2) 'temp2 = le code ASCII de text1
temp3 = Asc(Text3) 'temp3 = le code ASCII de text1
temp4 = Asc(Text4) 'temp4 = le code ASCII de text1
temp5 = Asc(Text5) 'temp5 = le code ASCII de text1
temp6 = Asc(Text6) 'temp6 = le code ASCII de text1
temp7 = Asc(Text7) 'temp7 = le code ASCII de text1
temp8 = Asc(Text8) 'temp8 = le code ASCII de text1
temp9 = Asc(Text9) 'temp9 = le code ASCII de text1
temp10 = Asc(Text10) 'temp10 = le code ASCII de text1
temp11 = Asc(Text11) 'temp11 = le code ASCII de text1
temp12 = Asc(Text12) 'temp12 = le code ASCII de text1
temp13 = Asc(Text13) 'temp13 = le code ASCII de text1
temp14 = Asc(Text14) 'temp14 = le code ASCII de text1
temp15 = Asc(Text15) 'temp15 = le code ASCII de text1
temp16 = Asc(Text16) 'temp16 = le code ASCII de text1
temp17 = Asc(Text17) 'temp17 = le code ASCII de text1
temp18 = Asc(Text18) 'temp18 = le code ASCII de text1
temp19 = Asc(Text19) 'temp19 = le code ASCII de text1
temp20 = Asc(Text20) 'temp20 = le code ASCII de text1
'On termine l'opération, on le montre donc à l'utilisateur,
'en mettant la progression de la progressbar à 100%
ProgressBar1.Value = "100"
'Puis on regroupe tous les caractères pour mettre en forme la clé générée
'(on ajoute au passage des tirets pour séparer la clé en groupes de 4)
key_entier = Text1 + Text2 + Text3 + Text4 + " - " + Text5 + Text6 + Text7 + Text8 + " - " + Text9 + Text10 + Text11 + Text12 + " - " + Text13 + Text14 + Text15 + Text16 + " - " + Text17 + Text18 + Text19 + Text20
'Puis on calcule la somme de tous les codes ASCII des caractères qui forment la clé
Somme = temp1 + temp2 + temp3 + temp4 + temp5 + temp6 + temp7 + temp8 + temp9 + temp10 + temp11 + temp12 + temp13 + temp14 + temp15 + temp16 + temp17 + temp18 + temp19 + temp20
'Et on vérifie que la clé se trouve entre 1400 et 1500 (pour qu'elle soit valide)
'Si elle se trouve en 1400 et 1500 (>1400 et <1500),
If Somme < 1500 Then
If Somme > 1400 Then
'Alors on l'ajoute dans la liste
List1.AddItem key_entier
'et on compte une ligne en + (ça va permettre d'arrêter la boucle + tard...)
number_list = number_list + 1
End If
End If
'Un problème : ça ajoute même les clés <1400 et >1500
'On fait donc d'autres fonctions :
'Si c'est inférieur à 1400,
If Somme < 1400 Then
'Alors on remplace la clé invalide par "Clé Invalide" (le programme est en anglais, donc...)
List1.List(number_list) = "Unvalid Key"
End If
'Et si c'est supérieur à 1500,
If Somme > 1500 Then
'alors on fait la même chose...
List1.List(number_list) = "Unvalid Key"
End If
'Puis on met une fonction qui va arrêter la boucle
'(sinon, ça n'en finit jamais, et ça fait planter le prog... normal... ;))
Loop Until number_list = 200 'On fait la boucle jusqu'à ce qu'il y ait 200 lignes
'(ça laisse le choix de la clé...)
'Puis on enlève le sablier, car on a finit le processus
MousePointer = vbDefault
'Et on donne le nombre de clés
'(là, ça sert à rien, ça sera toujours 200...)
MsgBox number_list & " found keys", vbOKOnly, "Star Wars Galaxies KeyMaker"
End Sub

Private Sub Label2_Click()
'Label nommé "STOP"
'##
'c'est pas trop conseillé d'arrêter en plein processus,
'parce que c'est en train de calculer en boucle, donc c'est pas bon,
'et ça va faire planter le prog...
'##
'On enlève le sablier
MousePointer = vbDefault
'Et on met le nombre de lignes de la liste à 199 pour que ça s'arrête (à 200)
'il vaut mieux mettre 199...
number_list = "199"
End Sub

Private Sub Save_Click()
'##
'il y a le composant "Microsoft common dialog control" sur la form
'c'est grâce à ce procédé qu'on peut afficher la fenêtre pour enregistrer ou ouvrir un fichier
'(et puis c'est plus présentable qu'une form faite par soi-même...)
'##
'On montre la fenêtre pour sauvegarder
CoD.ShowSave
'on mémorise le nom de fichier qui sera enregistré en .txt
nom_fichier = CoD.FileName & ".txt"
'on ouvre le fichier
Open nom_fichier For Output As #1
'puis on écrit toutes les lignes qu'il y a dans la liste
For n = 0 To (200 - 1)
Write #1, List1.List(n)
Next n
'et on ferme
Close #1
End Sub

Conclusion :


Heureusement pour moi, ça ne marche pas (sinon, je prends des risques...)

Eh oui, ces clés ne marchent pas ;) (pas de bol les ptits malins :))

Voilà,
Enjoy et bonne prog ;)

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.