Je sais que je dois utiliser algorithme euclidien étend , mais je ne sais pas exactement quels calculs je dois faire. J'ai des nombres énormes. Merci
Eh bien, d
est choisi de telle sorte que d * e == 1 modulo (p-1)(q-1)
, vous pouvez donc utiliser algorithme euclidien pour cela ( trouver l'inverse multiplicatif modulaire ) .
Si vous n'êtes pas intéressé à comprendre l'algorithme, vous pouvez simplement appeler BigInteger # modInverse directement.
d = e.modInverse(p_1.multiply(q_1))
Étant donné que, p = 11, q = 7, e = 17, n = 77, φ (n) = 60 et d =?
Premières valeurs de substitution de la formule: -
ed mod φ (n) = 1
17 d mod 60 = 1
L'étape suivante: - prenez le total de n, qui est 60 à votre gauche et [e] à votre droite.
60 = 17
3ème étape: - demandez combien de fois 17 va à 60. C'est 3,5… .. Ignorez le reste et prenez 3.
60 = 3 (17)
Étape 4: - maintenant vous devez équilibrer cette équation 60 = 3(17) de telle sorte que le côté gauche est égal au côté droit. Comment?
60 = 3(17) + 9 <== si vous multipliez 3 par 17, vous obtenez 51 puis plus 9, soit 60. Ce qui signifie que les deux côtés sont maintenant égaux.
Étape 5: - Prenez maintenant 17 sur votre gauche et 9 sur votre droite.
17 = 9
Étape 6: - demandez combien de fois 9 passe à 17. C'est 1,8 …….
17 = 1 (9)
Étape 7: - Étape 4: - maintenant vous devez équilibrer ce 17 = 1 (9)
17 = 1(9) + 8 <== si vous multipliez 1 par 9, vous obtenez 9 puis plus 8, soit 17. Ce qui signifie que les deux côtés sont maintenant égaux.
Étape 8: - prenez à nouveau 9 sur votre gauche et 8 sur votre droite.
9 = 1 (8)
9 = 1(8) + 1 <== une fois que vous avez atteint +1 pour équilibrer votre équation, vous pouvez arrêter et recommencer la substitution.
Étape A: -Dernière équation à l'étape 8 qui est 9 = 1(8) + 1 peut être écrit comme suit: 1. = 9 - 1 (8)
Étape B: -Nous savons ce qu'est (8) en disant simplement 8 = 17 - 1(9) de l'étape 7. Maintenant, nous pouvons réécrire l'étape A comme: -
1 = 9 -1 (17 - 1(9)) <== ici puisque 9 = 1 (9) nous pouvons réécrire comme: -
1 = 1 (9) -1 (17) +1 (9) <== regrouper les termes similaires. Dans ce cas, vous ajoutez 1(9) avec 1(9) - soit 2 (9).
1 = 2 (9) -1 (17)
Étape C: - Nous savons ce qu'est (9) en disant simplement 9 = 60 - 3(17) de l'étape 4. Maintenant, nous pouvons réécrire l'étape B comme: -
1 = 2 (60-3 (17) -1 (17)
1 = 2 (60) -6 (17) -1 (17) <== regrouper les termes similaires. Dans ce cas, vous ajoutez 6(17) avec 1(17) - soit 7 (17).
1 = 2 (60) -7 (17) <== à ce stade, nous pouvons arrêter, rien de plus à substituer, donc prenez la valeur suivante 17. Soit 7. Soustrayez-la avec le totient.
60-7 = d
Alors donc la valeur de d = 53.
Je veux juste augmenter le réponse de Sidudozo et clarifier certains points importants.
Tout d'abord, que devons-nous passer à Extended Euclidean Algorthim pour calculer d
?
N'oubliez pas que ed mod φ(n) = 1
et cgd(e, φ(n)) = 1
.
Sachant que l'Algorthim euclidien étendu est basé sur la formule cgd(a,b) = as + bt
, donc cgd(e, φ(n)) = es + φ(n)t = 1
, où d
doit être égal à s + φ(n)
afin de satisfaire les
ed mod φ(n) = 1
condition.
Donc, étant donné le e=17
Et φ(n)=60
(emprunté à réponse de Sidudozo ), nous substituons les valeurs correspondantes dans la formule mentionnée ci-dessus: cgd(e, φ(n)) = es + φ(n)t = 1
⇔ 17s + 60t = 1
.
À la fin du réponse de Sidudozo nous obtenons s = -7
. Ainsi d = s + φ(n)
⇔ d = -7 + 60
⇒ d = 53
.
Vérifions les résultats. La condition était ed mod φ(n) = 1
.
Regardez 17 * 53 mod 60 = 1 . Correct!