RSA-Implementierung in C#

Ich versuche zur Implementierung des RSA-Algorithmus in C#. Der code unten funktioniert, wenn p und q sind kleiner, aber nicht, wenn Sie versuchen zu replizieren, RSA-100 oder größer, wo p und q sind sehr große.

Beispielsweise, wenn:

p = 61, q = 53, n = 3233, phi(n) = 3120, e = 17, d = 2753

Einmal entschlüsselt, bekomme ich die richtige original messsage. Ich habe diese Werte aus der RSA Wikipedia-Seite. Der code funktioniert auch für andere kleine Werte von p und q.

Jedoch, wenn Sie RSA-100 oder mehr, ich bekomme nicht wieder meine ursprüngliche Nachricht. Ich habe versucht, mit verschiedenen Werten für den Exponenten (e) und sicher es ist coprime mit phi(n), aber ich kann nicht das richtige Ergebnis. Bin ich etwas fehlt einfach/offensichtlich?

Vielen Dank im Voraus für Eure Hilfe!

//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) mod phi sieht für mich falsch
möglich, Duplikat der so berechnen Sie D für die RSA-Verschlüsselung von P,Q und E

InformationsquelleAutor Ivan Stalev | 2013-04-17

Schreibe einen Kommentar