True random generator - C++ - Programmation
Marsh Posté le 17-07-2017 à 11:37:45
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 !
Marsh Posté le 17-07-2017 à 11:47:25
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".
Marsh Posté le 17-07-2017 à 11:47:57
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
Marsh Posté le 17-07-2017 à 13:23:36
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
Marsh Posté le 17-07-2017 à 14:09:43
Je ne vois pas l'intérêt du machin des carrés si le but est de lutter contre une suite récurrente ?
Marsh Posté le 17-07-2017 à 14:19:24
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é.
Marsh Posté le 17-07-2017 à 14:25:34
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 ...
Marsh Posté le 17-07-2017 à 14:37:26
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
Marsh Posté le 17-07-2017 à 14:45:47
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...
Marsh Posté le 17-07-2017 à 15:01:49
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
Marsh Posté le 17-07-2017 à 15:12:30
Personne ne s'énerve la (et j'avais bien lu au dessus)
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
Marsh Posté le 17-07-2017 à 15:27:13
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
Marsh Posté le 17-07-2017 à 18:26:54
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é... Par contre pour un jeu c'est complètement autre chose bien sûr.
(Je voulais juste le dire. )
Marsh Posté le 17-07-2017 à 21:53:02
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+,
Marsh Posté le 18-07-2017 à 09:20:37
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
Marsh Posté le 18-07-2017 à 12:49:54
Je parlais pas de OTP mais de XOR avec une constante bien sûr.
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.
Marsh Posté le 18-07-2017 à 16:29:27
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
c'est bon, c'est bon je sors...
https://en.wikipedia.org/wiki/The_A [...] rogramming
Marsh Posté le 18-07-2017 à 18:37:16
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?
Marsh Posté le 17-07-2017 à 11:27:44
Hello
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