Générateur de clés (keygen) avec clé publique et privée et guid

Soyez le premier à donner votre avis sur cette source.

Vue 39 070 fois - Téléchargée 3 089 fois

Description

Hello,

Voici mon premier petit programme (rien de génial, mais il fallait que j'apporte ma contribution au site qui m'a tant aidé :D )
Ce petit programme génère des clés de 25 caractères à partir des 4 premiers caractères qui sont aléatoires.

RRRRX-XXXXX-XXXXX-XXXXX (R = Random, X = généré)
Ce qui fait 36^4 soit 1'500'000 de clé valides sur 36^25

En plus de ça, je gère là dedans une clé que j'appelle « privée » que l'on peut se représenter comme le nom de l'application. par ex: "Word2000"
Une fois la clé générée elle sera mélangée avec un MD5 et la clé privée, ce qui permet d'utiliser le même algorithme pour plusieurs applications.
Après ça je propose une option qui permet de remélanger cette clé avec le GUID de la machine (ce qui rend la clé uniquement valable pour la machine en question).
Et pour couronner le tout, je remélange ça avec l'algorithme SHA-1 et une clé publique (que j'imagine comme un nom d’utilisateur).
Le GUID, la clé publique et privée ne sont que des options qui peuvent être désactivées mais qui servent à verrouiller une clé sur un utilisateur, un logiciel ou un ordinateur.

Le tout est fonctionnel, mais j'ai encore pas mal d'idées que je pourrais intégrer, comme un numéro de version, ou des dates (comme les anti-virus), ainsi que les tirets xxx-xxxx-xxxx
Voilà, n'hésitez pas pour les idées ou commentaires :)

j'ai essayé de commenter le tout au maximum pour que vous puissiez vous y retrouver
Merci à tous :)
Stéphane

Conclusion :


Essayez le, et dites moi ce que vous en pensez :) ce que je peux améliorer ou refaire

Je suis en première année de CSharp et y'a tellement à faire avec que je pense déjà à d'autres sources.
Encore merci à tous

PS: Je ne suis ni cryptographe ni mathématicien, je ne pense pas que mes clés soient infaillible ou blindée, et qu'une simple erreur de calcul pourrait tout mettre en échec, néanmoins avant de vous donner ça en pâture, je l'ai testé avec un autre soft de ma conception et je n'ai rien pus mettre en évidence de dangereux. Je serais ravi d'avoir votre avis sur cette question

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

jantosze
Messages postés
72
Date d'inscription
mercredi 29 mai 2013
Statut
Membre
Dernière intervention
15 mai 2009
-
salut,

Déjà cela fonctionne , par contre qq remarques de formes:
- faire une classe type outil qui permettrait de séparer les méthodes du formulaire d'interface, des méthodes utilitaires et faciliter la création d'une dll pour reuse par exemple.
- le remplissage du tableau MyValueKey a titre perso et pour lisibilité du mainteneur j'aurai préféré une liste initialiser dans un foreach par une fonction de calcul basé sur le rang dans la liste (MyValueKey[n-4]*MyValueKey[n-4]*MyValuekey[n-3]+NbQ[...)
cdt, JAN
stalmar
Messages postés
6
Date d'inscription
samedi 1 janvier 2005
Statut
Membre
Dernière intervention
26 octobre 2009
-
salut Jantosze

Merci d'avoir pris le temps de parcourir mon code ,
Effectivement pour le remplissage, la liste de mes MyValueKey[x] est assez affreuse, j'ai effectivement pensé y mettre une boucle mais j'avais des problèmes avec certains calculs qui me retournaient que 3 ou 4 caractères différents suivant les positions dans la clé. Je quand même essayer, sans ça c'est difficile de générer des clés de taille différentes donc...

Par contre pour la classe type outil, je ne vois pas vraiment ce que tu veux dire ? Je créer une classe avec seulement le Genkey et les autres dans une classe outils (makekey, changeGUID, etc...) ou c'est les fonctions de la form que je déplace dans une classe outils ?

Autre petit point que j'essaye de concevoir, c'est l'histoire des dates, mais je peine déjà rien qu'a la conception. je sais pas comment ajouter une date à ma clé et pouvoir la récupérer ensuite, surtout si je fais des passes MD5 dessus :S si quelqu'un à une idée, je suis preneur.

merci et @++
jantosze
Messages postés
72
Date d'inscription
mercredi 29 mai 2013
Statut
Membre
Dernière intervention
15 mai 2009
-
Salut Stalmar,

Concernant MyValyeKey c'est un tableau qui se remplit par calcul donc il y a un algo que tu utilise a mettre en œuvre.
Le point des classes il s'agit d'un problème de choix de langages et des conséquences sur l'architecture logique. Ton travail cadre très bine avec une réalisation cpp, par contre tu as choisi c# donc un langage fortement typé. Les conséquences sont diverses et ce choix s'appuie sur une spécification de ton architecture et en amont des objectifs fonctionnelles. Ainsi la classe que tu as réalisé est "une boite à outils" dont Form1 montre l'usage. Mais moi simple développeur/user j'ai pas besoin d'une boite à outil, il me faut des objets fonctionnels dans un composant. Par exemple après avoir créé un objet key, je suis capable de le comparer avec un autre objet key qui a été initialisé par une string soit if( key1 == key2 ) {..} sans plus de tracasserie... Donc, à mon avis, si tu souhaite finaliser ton travail c# tu dois reprendre( ou finaliser) ta conception fonctionnelle (pense fonctions et non réalisation) .
Ta dernière remarque n'est pas du codage mais touche la conception de ta solution, càd tes algos...

Dans l'attente de l'intégration de la variable temporelle, bon courage, JAN
stalmar
Messages postés
6
Date d'inscription
samedi 1 janvier 2005
Statut
Membre
Dernière intervention
26 octobre 2009
-
D'accord, je voir ce que tu veux dire, effectivement c'est une idée que je n'ai pas pensé. pour certains points il me manque encore une ou deux connaissances mais je vais m'efforcer d'apprendre ça. l'idéal serait donc d'avoir immédiatement accès au clés "Key MyKey = new Key(cléprivée)" au lieu de "GenerateurCle X = new GenerateurCle(); et ensuite X.GenKey();" si j'ai bien compris.

Je vais reprendre tout ça ce week-end pour l'améliorer et je rajouterai la mise à jour :)
encore merci pour tes conseils Jan
A bientôt
jantosze
Messages postés
72
Date d'inscription
mercredi 29 mai 2013
Statut
Membre
Dernière intervention
15 mai 2009
-
Par exemple, ta classe d'interface en capsule la classe outil, pour cela penses bien aux aspects fonctionnelles de la classe d'interface ( en matière d'échange de l'information ou aux process), cela doit déboucher sur une conception objet qui se traduira par la classe avec les méthodes, attributs et éléments (théoriquement cette classe d'interface doit cacher la complexité de la boite a outil).

Pour cette histoire de date, ton codage de clé ressemble à une fonction discrète sous la forme d'un polynôme, si cette hypothèse est juste tu pourrais crypter la date pour l'obtenir sous la forme d'un polynôme puis réaliser un produit de convolution entre les 2 polynôme ( la fonction inverse étant un opérateur de dé convolution) tu peux donc récupérer le polynôme de la date puis retrouver la date (principe typiquement appliquer dans le traitement du signal). C'est peut être une piste à creuser...
@+JAN

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.