J'essaye d'implémenter l'algorithme RSA en C#. Le code ci-dessous fonctionne lorsque p et q sont petits, mais pas lorsque vous essayez de répliquer RSA-100 ou plus, où p et q sont très grands.RSA Implémentation en C#
Par exemple, lorsque:
p = 61, q = 53, n = 3233, phi(n) = 3120, e = 17, d = 2753
Une fois déchiffré, je reçois le messsage d'origine correcte. J'ai ces valeurs du RSA Wikipedia page. Le code fonctionne également pour d'autres petites valeurs de p et q.
Toutefois, lorsque vous utilisez RSA-100 ou supérieur, je ne récupère pas mon message d'origine. J'ai essayé d'utiliser différentes valeurs pour l'exposant (e) et je me suis assuré qu'il est coprime avec phi (n) mais je ne peux pas obtenir le résultat correct. Ai-je manqué quelque chose de simple/évident?
Merci d'avance pour votre aide!
//p and q for RSA-100
//string p = "37975227936943673922808872755445627854565536638199";
//string q = "40094690950920881030683735292761468389214899724061";
string p = "61";
string q = "53";
//Convert string to BigInteger
BigInteger rsa_p = BigInteger.Parse(p);
BigInteger rsa_q = BigInteger.Parse(q);
//n = p * q
BigInteger rsa_n = BigInteger.Multiply(rsa_p, rsa_q);
//phi(n) = (p-1)*(q-1)
BigInteger rsa_fn = BigInteger.Multiply((rsa_p - 1), (rsa_q - 1));
BigInteger rsa_e = 17;
//Compute d
BigInteger rsa_d = BigInteger.ModPow(rsa_e, (rsa_fn - 1), rsa_fn);
//Encrypt the message, in this case 3007
//C = (3007^rsa_e) mod rsa_n
BigInteger C = BigInteger.ModPow(3007, rsa_e, rsa_n);
//Decrypt the message, M should equal 3007
//M = (3007^rsa_d) mod rsa_n
BigInteger M = BigInteger.ModPow(C, rsa_d, rsa_n);
d = e^(phi-1) phi mod semble erroné me – CodesInChaos
double possible de [Comment calculer D pour le cryptage RSA de P, Q et E ] (http://stackoverflow.com/questions/14229040/how-to-calculate-d-for-rsa-encryption-from-pq-and-e) – CodesInChaos