Générer exactement le premier numéro avec Java
Je suis conscient de la fonction BigInteger.probablePrime(int bitLength, Aléatoire rnd) que les sorties probablement le premier nombre de bits de longueur. Je veux un nombre premier en Java. Est-il un FOSS de la bibliothèque de le faire avec des performances acceptables? Merci à l'avance!
EDIT:
Je suis à la recherche d'1024 & 2048 bits les nombres premiers.
Êtes-vous sûr que vous avez besoin de vrais nombres premiers? Dans la plupart des cas, par rapport premier est assez bon. La plupart des clés RSA sont générés avec une relative des nombres premiers.
vous n'avez probablement pas envie d'écrire de la cryptographie genre de choses si vous ne comprenez pas qu'il est plus probable que vous obtenez frappé par la foudre de la journée vous avez gagné à la loterie nationale qu'il est probable que probablePrime vous obtient un non-nombre premier (lorsqu'il est correctement appelé). Il est tout au sujet de probabilités 🙂
vous n'avez probablement pas envie d'écrire de la cryptographie genre de choses si vous ne comprenez pas qu'il est plus probable que vous obtenez frappé par la foudre de la journée vous avez gagné à la loterie nationale qu'il est probable que probablePrime vous obtient un non-nombre premier (lorsqu'il est correctement appelé). Il est tout au sujet de probabilités 🙂
OriginalL'auteur Viet | 2010-05-21
Vous devez vous connecter pour publier un commentaire.
edit: Ou, si vous n'avez pas confiance en la isProbablePrime être assez grande certitude, l'utilisation de la BigInteger constructeur
BigInteger(int bitLength, int certitude, Aléatoire rnd)
qui permet de régler votre certitude seuil:Probabiliste tests utilisés pour les fins sont garantis pour limiter la probabilité de faux positifs -- c'est pas comme si il ya quelque chose à corriger les numéros qui existent qui va se faufiler à travers, c'est juste une question de comment bas vous voulez la probabilité d'être. Si vous n'avez pas confiance en la Java BigInteger classe à utiliser ces (ce serait bien si ils ont documenté ce test a été utilisé), utilisez la Rabin-Miller test.
+1 - cependant, il convient de noter que le pire des cas de l'AKS est
O((logN)^12)
. C'est rapide par rapport à factoriser un premierN
, mais pas très rapide en termes absolus.+1 merci! L'ajout de certitude sûrement augmente la sécurité.
"L'ajout de certitude sûrement une augmentation de la sécurité" -- vous pouvez être certain, mais pas absolument certain. 😉
OriginalL'auteur Jason S
Il existe quelques méthodes pour générer de très grands nombres premiers avec des performances acceptables, mais pas avec une densité suffisante pour la plupart des fins autres que d'entrer dans le Guiness Book des Records.
Regardez-le comme ceci: la probabilité qu'un certain nombre retourné par
probablePrime()
n'est pas premier est plus faible que la probabilité que vous et tout le monde vous savez faire frapper par l'éclairage. À deux reprises. Sur une seule journée.Juste ne vous inquiétez pas à ce sujet.
Je suis en supposant que vous souhaitez mettre en œuvre un algorithme RSA? Même l'officiel des implémentations de ces utiliser probable nombres premiers.
le chiffrement de la communauté utilise probable premier tests pour générer cryptographique sécurisé aléatoire des nombres premiers.
Donc "probable" est un euphémisme, mais ils ne voulaient pas le nom de la méthode
almostAlwaysButOnceInABlueMoonNotPrime()
... 😉Ensuite, utilisez probablePrime(). C'est ce qui est pour. Personne dans le monde entier connaît une meilleure méthode. Et si ils l'ont fait, il serait plus probable de dire que le premier basé sur la cryptographie est devenue inutile.
OriginalL'auteur Michael Borgwardt
Vous pouvez également utiliser le constructeur de
BigInteger
à générer une véritable premier:Le temps d'exécution est proportionnel à la certitude, mais sur mon Core i7, il n'est pas un problème.
OriginalL'auteur Bart van Doormaal
Faire une méthode et l'envelopper.
Comment pensez-vous isPrime œuvres? C'est probablement le même test que probablePrime utilise pour déterminer si le nombre aléatoire est un nombre premier.
Curieusement, cette réponse (à partir de 5 ans) a les mêmes propriétés de base comme l'accepter réponse. Faire une probable premier et de continuer à le tester jusqu'à ce que vous êtes sûr que c'est composite.
J'accepte avec @Silver comment nous pouvons écrire le isPrime méthode?
Il existe de nombreuses façons de déterminer si un nombre est premier ou non, qui sont au-delà de la portée de la question.
OriginalL'auteur corsiKa
La probabilité qu'un
BigInteger
retourné par la méthodeprobablePrime()
est composé ne pas dépasser 2^-100.OriginalL'auteur Corona Luo