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);
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
d=e^(phi(n)-1) mod phi(n) sieht für mich falsch. Sie müssen entweder d=e^(phi(phi(n))-1) mod phi(n), oder Sie können die Verwendung von extended euclid.
InformationsquelleAutor CodesInChaos
Ich sehe, dass Sie bereits akzeptiert die Lösung. Ich möchte jedoch an dieser Stelle auf den Artikel, der zeigt ein komplexeres Beispiel auf RSA-Verschlüsselung in C#. Check diesen Beitrag (Dort ist auch der Quellcode verfügbar):
http://xmight.blogspot.com/2011/07/multithreaded-rsa-encryption-with-keys.html
Freut mich zu hören, das war Ihr Ziel. Und ja, du hast Recht 🙂
Dein link auf source code ist nun gebrochen. Erstellen Sie bitte einen neuen link.
InformationsquelleAutor XMight