Qu'est-ce qu'une solution pour générer au hasard long long
avec une force cryptographique С ++? (boost est autorisé)Générateur aléatoire long long C++
Répondre
L'en-tête <random>
fournit un accès portable à des installations de nombres aléatoires, y compris, potentiellement, un pRNG cryptographique.
#include <random> // random_device, uniform_int_distribution
#include <algorithm> // generate_n
#include <iterator> // ostream_iterator
#include <iostream> // cout
#include <functional> // bind, ref
int main() {
std::random_device r;
std::uniform_int_distribution<long long> dist;
std::generate_n(std::ostream_iterator<long long>(std::cout, "\n"), 10,
std::bind(dist,std::ref(r)));
}
std::random_device
ne peut pas être un PRNG cryptographique sur toutes les implémentations, de sorte que vous devrez vérifier la documentation de mise en œuvre. En particulier, VC++ avant 2012 ne fournit pas une implémentation non déterministe. VC++ 2012 et les versions ultérieures implémente cela en utilisant les services de cryptographie Windows.
Les implémentations sur d'autres systèmes d'exploitation tels que Linux ou Mac OS X peuvent couramment utiliser "/ dev/urandom" ou "/ dev/random" ou tout autre périphérique aléatoire exposé via le système de fichiers. Par exemple. libC++ utilise par défaut "/ dev/urandom", qui sous OS X utilise l'algorithme Yarrow.
Je sais que vous avez exclu l'amélioration, mais boost::random_device
a une implémentation pour Windows qui utilise les services de cryptographie de cette plate-forme.
+1 pour l'utilisation de std mais aussi pointant pour booster à nouveau (je ne comprends pas pourquoi les gens n'ont pas de configuration de boost par défaut) – gvd
@gvd: De nombreuses entreprises font pas comme mettre du code source ouvert sur la machine de construction. –
Sous linux vous pouvez lire /dev/random
ou /dev/urandom
Ils fournissent tous les deux l'entropie cryptographique.
différence entre eux étant: /dev/random
blocs si l'entropie est épuisé, donc il pourrait être plus lent que /dev/urandom
mais est « plus forte »
Ainsi, en utilisant des flux, il ressemblera à ceci
long long n;
std::ifstream rstream ("/dev/random");
rstream >> n;
- 1. C/C++ long long à Java long
- 2. Python long type C 'long long'
- 3. Convertir la chaîne à long long C?
- 4. non signé long long VS non signé long long int
- 5. "long long long" est trop long pour gcc?
- 6. long long vs multiplication int
- 7. Comment imprimer long long
- 8. tableau long-byte long
- 9. À propos du long long et long double
- 10. non signé long long int
- 11. C# TabPage.Controls.Add trop long
- 12. Coulée sur long long (GCC)
- 13. Division de unsigned long long
- 14. un long fichier long lecture
- 15. Unsigned Long Long - Sortie bizarre
- 16. unsigned long long à double
- 17. c passant la valeur à long unsigned long
- 18. problèmes avec unsigned long long et l'impression C++
- 19. non signé long long se comporter impair dans C
- 20. <built-in>: 1: 2: avertissement: utilisation de C++ 0x constante long long [-Wlong-long]
- 21. convertir la chaîne en long long
- 22. Spécificateur de format pour « long long »
- 23. Convertir une chaîne ASCII en long long
- 24. MSVC++ de manutention unsigned long long int
- 25. C# Un générateur BigInt aléatoire
- 26. Qu'est-ce que "long long (^ blockFun)() = (long long (^)()) moreBlockFun" signifie et fait?
- 27. long à HWND (VS8 C++)
- 28. C++ adresse chaîne -> long
- 29. Objective-C Double, Long Calcul
- 30. Le type de retour de (long + long)
Pourquoi ne pas Boostez ? -il nous aide à comprendre quelles sont vos limites – Mark
@Mark j'ai besoin d'une solution sans boost car elle doit fonctionner sous linux sans bibliothèques boost pré-installées – Roman
Sur linux vous pouvez lire 'sizeof (long long)' octets de '/ dev/aléatoire ». – zch