IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

C++Builder Discussion :

Qualité du random de C Builder ?


Sujet :

C++Builder

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2003
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Qualité du random de C Builder ?
    Bonjour

    je crois que les fonctions random() ou rand() de C sont standard, mais que leur implémentation dépend de la librairie utilisée, donc de Borland dans notre cas.
    Avez vous une idée de l'algorithme utilisé par Borland pour générer les nombres aléatoires ? Ceci pour évaluer leur qualité pour des applications cryptographiques.
    Est-ce documenté ?

    Merci
    Dangerol

  2. #2
    jmv
    jmv est déconnecté
    Membre confirmé Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Points : 603
    Points
    603
    Par défaut
    je ne sais pas comment sont implémentées rand() et random(), mais une chose est sure, ces fonctions sont trop prévisibles pour être employé pour de la cryptographie.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 30
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Tout ce que je peux te dire c est quelle ne sont pas vraiment aleatoires.
    Je te sugere vivement de la refaire avec le temps ... Car si tu relance le prog elle ressort les nombres dans le meme ordre..

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 35
    Points : 30
    Points
    30
    Par défaut
    Si c'est pour effectuer du cryptage de donnée tu peux utiliser un cryptage basé sur des XOR dont il a déjà été question de nombreuse fois dans ce forum!

  5. #5
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Bonjour,

    Citation Envoyé par DamessS
    Bonjour,

    Tout ce que je peux te dire c est quelle ne sont pas vraiment aleatoires.
    Je te sugere vivement de la refaire avec le temps ... Car si tu relance le prog elle ressort les nombres dans le meme ordre..
    Si tu n'initialise pas le générateur de nombres aléatoires, forcément...
    L'initialisation consiste justement à utiliser le nombre de millisecondes depuis une certaine date comme valeur de départ...

    Cordialement,

    Arnaud

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 89
    Points : 90
    Points
    90
    Par défaut
    Salutation,
    Exemple Borland:
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>

    int main(void)
    {
    int i;
    time_t t;

    srand((unsigned) time(&t));
    printf("Ten random numbers from 0 to 99\n\n");
    for(i=0; i<10; i++)
    printf("%d\n", rand() % 100);
    return 0;
    }
    En effet lorsque l'on compile, on obtient bien 10 nombres différents entre 0 et 99 ! Et lorsque l'on relance le programme, on obtient une combinaison différente. Comme le dit si bien Greybird, il faut initialiser avec un date. La fonction calcul ensuite une valeur correspondant au temps écouler entre cette date et le 1/1/1900 !
    Le seul pb à cette méthode est que si on appel ce code deux fois rapidement, on obtient la même combinaison! Mais je crois que ce delai ne dépasse pas la seconde. Faites donc attention a ne pas appeler cette méthode deux fois à la suite rapidement.
    SI pas malheur c'est la cas, vous pouvez peut être utiliser au mieu cette précédente fonction pour en retirer un plus grand nombre de valeurs aléatoire ...
    Bonne continuation
    Cordialement
    Walm

  7. #7
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Bonjour,

    Le mieux étant de faire l'initialisation une bonne fois pour toutes au début du programme, et pas à chaque début de fonction.

    Comme ça, on continue la série de nombre pseudo-aléatoires.

    Cordialement,

    Arnaud

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 89
    Points : 90
    Points
    90
    Par défaut
    Salutation,
    Citation Envoyé par Greybird
    Bonjour,
    Le mieux étant de faire l'initialisation une bonne fois pour toutes au début du programme, et pas à chaque début de fonction.
    Ceci est une bonne remarque. J'y penserai à l'avenir. Toutefois, cetta fonction n'est pas cyclique? Cad qu'une fois avoir tirer de cela une grande quantité de nb aléatoire, le programme retourne les même valeurs qu'au début???
    Cordialement
    Walm

  9. #9
    Candidat au Club
    Inscrit en
    Janvier 2003
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Source du rand() de stdlib.c
    Merci pour vos réponses, mais je me doute que la qualité du rand standard est faible, pour de la cryptographie.

    Je voudrais seulement savoir à quel point, aussi j'ai besoin des sources, ou au moins de l'algorithme, avec notamment la période max du générateur.

    Merci

  10. #10
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Bonjour,

    Citation Envoyé par Walm
    Toutefois, cetta fonction n'est pas cyclique? Cad qu'une fois avoir tirer de cela une grande quantité de nb aléatoire, le programme retourne les même valeurs qu'au début???
    Bien sûr. Ceci dit, il faut commencer à en tirer _beaucoup_. C'est la période justement. Mais je ne la connais pas pour C++ Builder.

    Cordialement,

    Arnaud

  11. #11
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 886
    Points : 1 526
    Points
    1 526
    Par défaut
    La fonction rand du C standard (LIBC.LIB) ressemble à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int rand(void) {
      Seed = Seed * 0x343FD + 0x269EC3;
      return (Seed >> 0x10) & 0x7FFF;
    }
    Seed étant une variable globale initialisée par la fonction srand

  12. #12
    jmv
    jmv est déconnecté
    Membre confirmé Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Points : 603
    Points
    603
    Par défaut
    il existe la norme ANSI X9.17 qui décrit comment générer des clés aléatoires.

    voir http://www.cadence.com/datasheets/RNG_DataSheet.pdf

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Qualité du Math.random() ?
    Par bruno_nono dans le forum Langage
    Réponses: 6
    Dernier message: 03/03/2010, 12h30
  2. Problème Borland builder + boost lib (random.hpp)
    Par visodyn dans le forum C++Builder
    Réponses: 1
    Dernier message: 04/02/2008, 17h29
  3. Problème Borland builder + boost lib (random.hpp)
    Par visodyn dans le forum Boost
    Réponses: 2
    Dernier message: 04/02/2008, 17h21
  4. Outils, cours et NOUVEAUX tutoriels pour Borland C++Builder
    Par hiko-seijuro dans le forum C++Builder
    Réponses: 10
    Dernier message: 12/03/2006, 22h33
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo