Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1308 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  True random generator

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

True random generator

n°2303464
Dolb66
Posté le 17-07-2017 à 11:27:44  profilanswer
 

Hello  :bounce:  
 
Je suis en train d'essayer de programmer un simple petit programme de poker en C++,
Jusque la sa marche pas mal, mais je réalise que j'ai toujours les mêmes cartes en main au départ,
J'avais oublier que la fonction rand % retournait toujours la même suite de chiffre aléatoire.
 
Du coup j'ai regardé mes cours de DUT, on avait vu qu'il était possible d'aller chercher des chiffres aléatoires en les importants de programmes spécifiques.
Ou alors qu'on pouvait également les sélectionner par des phénomènes physique (comme le placement de la souris à l'heure actuel va retourner un chiffre)
 
J'avais pas trop écouter ces passages et on a pas vraiment fait de travaux pratique.
 
Quelqu'un aurait des sources à me partager, sur une méthode pour avoir un VRAI chiffre aléatoire,  
 
Cordialement

mood
Publicité
Posté le 17-07-2017 à 11:27:44  profilanswer
 

n°2303465
Dolb66
Posté le 17-07-2017 à 11:37:45  profilanswer
 

Ouais bon ok je suis une quiche je m'escuse !
j'avais pas vu le srand(time(NULL));
 
 
Parcontre, si c'est possible ce que je demandais de faire, je suis toujours preneur, sa ne serait que du bonus !


Message édité par Dolb66 le 17-07-2017 à 11:38:17
n°2303466
The_Kid
Call me Billy
Posté le 17-07-2017 à 11:47:25  profilanswer
 

Quelqu'un a posé une question similaire récemment en python
 
voila la réponse qui lui a été donné
http://forum.hardware.fr/hfr/Progr [...] 6084_1.htm
 
si tu veux plus de détails tu peux aller du côté de
https://fr.wikipedia.org/wiki/G%C3% [...] %A9atoires
 
De ton côté tu as recours a la fonction time pour obtenir un nombre servant de base à ta "suite".


Message édité par The_Kid le 17-07-2017 à 11:48:49
n°2303467
TotalRecal​l
Posté le 17-07-2017 à 11:47:57  profilanswer
 

Les générateurs aléatoires se basent toujours sur "quelque chose", la notion de vrai aléatoire n'existe pas vraiment.  
Si tu veux juste un générateur "pas prévisible et qui ne renvoie pas de séquences répétitives" il y a cependant plein de librairies et thèses de recherche qui portent sur le sujet pour tous les langages, sache juste que tu t'attaques à un gros morceau d'informatique théorique.  
 
un srand() correctement initialisé suffit très largement pour n'importe quel jeu basique.
C++11 a aussi introduit #include <random> et ce qui va avec.
Cadeau : https://channel9.msdn.com/Events/Go [...] ed-Harmful


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2303475
Dolb66
Posté le 17-07-2017 à 13:23:36  profilanswer
 

Merci beaucoup pour vos réponses,
The_Kid, tes formules m'ont rappelé une façon de faire qu'on m'avait enseigné.  
1. Je recupère le random,  
2. Je le met au carré
3. Je récupère la valeur au centre de mon resultat (exemple : 2555,  2|55|5) ce qui me donne 55.
 
Je ne sais plus du tout de qui venait cette méthode,
 
Et oui TotalRecall, mon srand() pour le cas actuel m'est utile, c'etait surtout pour voir toutes les autres possibilités :)
 
Merci :)

n°2303477
TotalRecal​l
Posté le 17-07-2017 à 14:09:43  profilanswer
 

Je ne vois pas l'intérêt du machin des carrés si le but est de lutter contre une suite récurrente ?


Message édité par TotalRecall le 17-07-2017 à 14:09:52

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2303478
Devil'sTig​er
Posté le 17-07-2017 à 14:19:24  profilanswer
 

C'est une méthode de random connue:
 
https://en.wikipedia.org/wiki/Middle-square_method
 
Mais utilise le package random ou srand ca sera suffisant et déja largement bien supporté.

n°2303480
TotalRecal​l
Posté le 17-07-2017 à 14:25:34  profilanswer
 

Ah là je vois, mais j'ai l'impression qu'entre l'article wikipedia et ce qu'a dit Dolb66 il y a un tout petit peu qui a disparu, un peu comme si ça n'avait rien à voir en fait [:gratgrat]...


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2303482
Dolb66
Posté le 17-07-2017 à 14:37:26  profilanswer
 

Bah si quand même sinon il aurait pas compris de quoi je parlais x), C'est juste que mon exemple est pourris :x C'est pas possible d'avoir une suite récurrente regarde je reprend mon 2555 :  
A) 2|55|5 -> 1er retourner = 55
B) 55² = 3025 donc 3|02| 5 -> 2eme retourner = 02
 
Mais dans mes souvenirs quand on a un zero qui apparait y a quelque chose de différent à faire car le prochain carré sera ridiculement petit.
 
Désolé si je me suis mal exprimé Total :)

n°2303483
Devil'sTig​er
Posté le 17-07-2017 à 14:45:47  profilanswer
 

Dans tous les cas c'est une méthode peu fiable, donc pourquoi tu t'emmerdes avec?
 
Tu as srand(time(NULL)) qui suffit dans de nombreux cas, et <random> avec en plus un exemple dans la vidéo la haut si tu as besoin d'un random vraiment précis, alors pourquoi réinventer la roue...

mood
Publicité
Posté le 17-07-2017 à 14:45:47  profilanswer
 

n°2303484
Dolb66
Posté le 17-07-2017 à 15:01:49  profilanswer
 

Relis moi au dessus :)  
J'utilise seulement mon srand la donc ne t'enerve pas :( , j'avais dit " sa ne serait que du bonus !". Je m'informais au passage un petit peu, sa fait longtemps que j'avais pas vu sa ;)
Merci en tout cas,  
 
Bye

n°2303486
Devil'sTig​er
Posté le 17-07-2017 à 15:12:30  profilanswer
 

Personne ne s'énerve la (et j'avais bien lu au dessus) :D
 
Mais c'est un secteur pas peu/évident ou il faut souvent un background important en math...
 
Bref de toute facon comme dit ca se passe ici:
https://en.wikipedia.org/wiki/List_ [...] _PRNG_APIs

n°2303487
The_Kid
Call me Billy
Posté le 17-07-2017 à 15:27:13  profilanswer
 

Dans le même genre en utilisant des décallages de bit tu as les registres à décallages gauches
 
https://fr.wikipedia.org/wiki/Regis [...] %C3%A9aire
 
le gif de la page explique bien je trouve.
 
C'est souvent utilsié en crypto en rendant le truc plus complexe, en composant plusieurs ensembles par exemples

n°2303493
rat de com​bat
attention rongeur méchant!
Posté le 17-07-2017 à 18:26:54  profilanswer
 

Parlant de crypto... Dans ce domaine hautement sensible il vaut mieux utiliser des bibliothèques qui ont fait leur preuves (pour les générateurs de nombres aléatoires et de manière plus générale toute histoire de crypto/authentification/...) plutôt que de bricoler soit-même, une petite erreur peut faire chuter un super cryptage AES au même niveau qu'un XOR 0x42 niveau sécurité... :o Par contre pour un jeu c'est complètement autre chose bien sûr.
(Je voulais juste le dire. :o )

n°2303502
gilou
Modérateur
Modzilla
Posté le 17-07-2017 à 21:53:02  profilanswer
 

DE toute façon, sur un ordi, si on ne fait qu'utiliser un algo, on aura que du pseudo random, pour le true random, il faut une source physique.
C'est d'ailleurs pour cela entre autres que les bécanes modernes (hors OEM) ont un module TPM.
A priori, il y a moyen d'y accéder par programme: https://github.com/Microsoft/TSS.MSR
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2303512
The_Kid
Call me Billy
Posté le 18-07-2017 à 09:20:37  profilanswer
 

Le one time pad ou xor est je cite wikipédia  "théoriquement impossible à casser"
 
Si tu possèdes une suite de nombre aléatoires et si tu as confiance dans la méthode dans laquelle tu les as obtenus (pas de répétition dans la clé et algorithme robuste).
Tu possèdes un algo de chiffrement sur, le problème de nos jours vient dans l'échanges du masque et le chiffrement de très gros volume de données qui permettent de deviner la méthode pour générer ta suite de nombre.
De plus ton algorithme est à disposition de tout le monde si il doit être implémenté par les navigateurs etc...
 
Si tu t'envois un message en utilisant le xor, si ils ignorent le message d'origine et la clé, aucun moyen de déchiffrer. Ils ont aucun moyens de tester ton algo et de voir la sortie.
 
https://fr.wikipedia.org/wiki/Masque_jetable

n°2303528
rat de com​bat
attention rongeur méchant!
Posté le 18-07-2017 à 12:49:54  profilanswer
 

Je parlais pas de OTP mais de XOR avec une constante bien sûr. :o  

Citation :

De plus ton algorithme est à disposition de tout le monde si il doit être implémenté par les navigateurs etc...

Et ça c'est une très bone chose! La sécurité par l'obscurité ne marche pas! https://fr.wikipedia.org/wiki/S%C3% [...] urit%C3%A9   https://fr.wikipedia.org/wiki/Principe_de_Kerckhoffs
 
edit:

Citation :

Tu possèdes un algo de chiffrement sur, le problème de nos jours vient dans l'échanges du masque et le chiffrement de très gros volume de données qui permettent de deviner la méthode pour générer ta suite de nombre.

J'ai pas compris... Il existe des générateurs de nombres aléatoires qui utilisent des données genre utilisation clavier/souris/réseau et autre et des algorithmes complexes (je suppose qu'on doit y retrouver des fonctions de hashage cryptographiquement sûr), dans ce cas il est (généralement) impossible de deviner la méthode / retrouver les données aléatoires. Et pour les échanges de masque / clé on peut utiliser la crypto asymmétrique, voir TLS. Après certes il y a parfois des problèmes / attaques possibles, justement c'est une matière très complexe.


Message édité par rat de combat le 18-07-2017 à 12:53:57
n°2303548
leonhard
Posté le 18-07-2017 à 16:29:27  profilanswer
 

Comme c'est l'été et que tout le monde est à la plage, une bonne lecture de plage sur le sujet est le volume 2 du TAOCP (The Art Of Computer Programming) de Knuth  :pt1cable:  
 
c'est bon, c'est bon je sors...  
 
 
https://en.wikipedia.org/wiki/The_A [...] rogramming

n°2303556
rat de com​bat
attention rongeur méchant!
Posté le 18-07-2017 à 18:37:16  profilanswer
 

Bonne lecture certainement, mais ça ne doit pas être très digeste. J'ai jamais eu en main un de ses bouquins, je suppose qu'il faut être étudiant en informatique ou maths pour comprendre non? :o


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  True random generator

 

Sujets relatifs
Fonction RandomProblème Workbook.close Savechanges:= True
Ligne d'affichage étrange ('set', 'anonymizeIp', true);random position 2d array
Gerer le random avec plusieurs valeurs (Urgent)FileExists retourne true alors que le fichier n'existe plus !
[Recherche] Web service retournant "true" ou "false"random chiffre, lettre, caractère spéciaux
C++ - Cplex problem de variable dans une boucle for & randomdifférence entre for(;;) et while(true)
Plus de sujets relatifs à : True random generator


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR