Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Algorithme de génération de clé


Sujet :

Algorithmes et structures de données

  1. #1
    Nouveau membre du Club
    Algorithme de génération de clé
    Salut tout le monde. Je développe des logiciels en VB.net et j'aimerai y intégrer un système d'activation par clé. Cependant je cherche un algorithme assez complexe qui me permettra de générer le maximum de clés. J'ai juste besoins de vos propositions pour m'inspirer !

  2. #2
    Membre habitué
    Citation Envoyé par Joe Sidik Voir le message
    Salut tout le monde. Je développe des logiciels en VB.net et j'aimerai y intégrer un système d'activation par clé. Cependant je cherche un algorithme assez complexe qui me permettra de générer le maximum de clés. J'ai juste besoins de vos propositions pour m'inspirer !
    A priori le nombre de clés possibles dépend de sa longueur Avec 12 caractères tu peux en faire dans les 400 millions.
    Tous les langages ont un générateur de nombres aléatoires, autant s'en servir.
    Savoir pour comprendre et vice versa.

  3. #3
    Membre éclairé
    Générateur aléatoire
    Bonjour,

    La solution du générateur aléatoire est certainement la plus simple et la plus élégante.

    Cependant il faut se méfier d'une chose. Dans de nombreux langages, la génération recommence une même séquence à chaque lancement de programme.

    Il faut alors prendre la précaution d'initialiser le générateur par une valeur (souvent nommée seed pour germe) imprévisible sinon aléatoire. Prendre le nombre (ou une partie basse de ce nombre) de millisecondes de session est souvent une solution.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  4. #4
    Membre expérimenté
    Juste une petite remarque sur la génération de licences basées sur des générateurs pseudo aléatoires (PRNG).

    Comme l'ont bien dit Guesset et valentin03, la combinaison PRNG et initialisation avec le temps est la plus classique et marche bien.

    Par exemple en C, l’utilisation classique de la fonction rand est :

    Code c :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    srand(time(NULL)); // J'initialise mon PRNG (graine) avec le temps actuel (en secondes)
    for( i = 0 ; i < n ; i++ )
        printf("%d\n", rand() % 100); // Je génère des variables entre 0 et 99

    Ça a l'air très bien et ça marche. A chaque exécution j'aurais une séquence de nombres différente et qui paraît aléatoire

    MAIS: Ces nombres ne sont pas vraiment aléatoires, ils sont déterministes!


    En fait, en interne, le PRNG classique de C est un générateur concurrentiel linéaire défini comme (je simplifie légèrement):
    Code C :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    unsigned int graine;
    void srand(unsigned int gr){
    graine = gr
    }
    int rand() {
        int resultat = ((graine* 1103515245U) + 12345U) & 0x7fffffff;
        graine = resultat
        return resultat;
    }


    Donc on voit bien que derrière la magie on a quelque chose de totalement déterministe et que si on trouve la graine, on pourra avoir la séquence de nombre générés et donc retrouver tes clés! Je trouve ça à la fois assez beau et presque vertigineux: quelque chose qui nous paraît vraiment aléatoire est en fait juste une multiplication, une addition et un masquage.

    Par exemple, si je sais que ma clé est générée en septembre 2019, je peux tester toutes les possibilités, c'est à dire 60*60*24*30 = 2,5 millions. Avec un processeur classique et un gros force brute ça se casse en environ 40 ms!! Même avec un PRNG qui s'initialise à la milliseconde, on reste sous la barre de la minute pour casser le générateur.

    Voilà, tout ça pour dire que ton générateur de clé n'est pas magique, il en existe des très bon et des très mauvais, si possible utilise les bons pour ta génération de clé.

    Pour nuancer mon propos, si les "mauvais" générateurs sont encore utilisés aujourd'hui c'est qu'ils sont hallucinemment plus rapides que les bons. Donc dans un certain nombre de cas ou tu as plus besoin de performances que de sécurité cryptographique, un "mauvais" générateur donc sera bien plus adapté qu'un "bon"!

    Bonne journée

  5. #5
    Rédacteur

    Bonjour.
    Concernant la génération de nombres aléatoires, Denis Hulo a écrit un article (voir le chapitre 6) en utilisant la méthode de Fibonacci:

    https://denishulo.developpez.com/tut...oires-vba/#LVI

    Si ça peut aider ou donner des idées.
    N'hésitez pas à consulter mon mémento sur la programmation en VBA pour EXCEL tome 1.
    Ou le tome 2 qui aborde la programmation en mode graphique avec un exemple de programmation d'un jeu d'arcade en VBA
    Et pour les curieux, le tome 3 qui aborde le problème du voyageur de commerce.
    Le tome 4 est consacré à la cryptologie en VBA et satisfera ceux qui ont besoin de confidentialité.
    Vous découvrirez dans le tome 5 les fonctions SQL pour gérer les tableaux de données et l'application Sentinelle qui veille sur vos fichiers.
    Le tome 6, dernier de la série, vous apprendra à créer des fonctions pour simplifier la vie des utilisateurs.
    Le Crible Quadratique donne toutes les fonctions pour les opérations sur les grands nombres en VBA.
    N'oubliez pas de consulter les FAQ EXCEL et les cours et tutoriels comme par exemple celui de Jean-Marc RABILLOUD qui est très complet.

  6. #6
    Nouveau membre du Club
    Merci à tous
    Je vous remercie tous pour votre aide... Cela m'a vraiment été d'une très grande utilité !

  7. #7
    Membre chevronné
    Algorithme de génération de clé
    Bonjour,

    On trouve sur ce site un bon article sur les générateurs de nombres pseudo-aléatoires

    ainsi qu'une courte discussion.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique