Java Modulo rechnet Falsch

bcmIT

Cadet 4th Year
Registriert
Sep. 2012
Beiträge
111
Hei Zusammen

Ich habe ein Problem:
Ich möchte Folgendes Rechnen:
Code:
Double cryptedNumber = (Math.pow(1235,59))%1739;

Die Hochzahl wird richtig berechnet (2.5606516317325527E182)
Die als cryptedNumber bekomme ich dann aber 651.0 anstelle von 822...

Hab den Verdacht das ich etwas bei den Datentypen verbockt habe.
Kann mir einer von euch helfen?

Vielen Dank
 
Probier mal:
Code:
BigInteger basis = new BigInteger("1235");
BigInteger exponent = new BigInteger("59");
BigInteger modulo = new BigInteger("1739");
BigInteger cryptedNumber = basis.modPow(exponent, modulo);
System.out.println(cryptedNumber);
VG
 
Zuletzt bearbeitet:
Hier kommen 2 Dinge zusammen:

  • Doubles sind fehlerbehaftet aufgrund der begrenzenten Genauigkeit
  • Java implementiert den Modulo-Operator anders als andere Sprachen

Ersteres kannst du über die BigIntegers wie von Jenix beschrieben, lösen. :)
 
Das sieht aus, als wolltest du RSA oder Diffie-Hellman oder so selber implementieren.

Wenn du das veröffentlichst, bitte ich darum, dass du prominent darauf hinweist, dass diese Implementierung nicht sicher ist.
Auch wenn ich die Details deiner Implementierung nicht kenne, halte ich es für grundsätzlich sinnvoll, das zu tun, es sei denn
man ist sich absolut sicher, das Gegenteil ist der fall. Und das bist du nicht.

Siehe auch: https://github.com/SirDzstic/libnetcrypt
 
Falls ich mich nicht irre macht man das ganze sowiso etwas anders, also modulo auf großen Zahlen. Mit so großen Zahlen wird das ganze nie effizient laufen.

Ich kann mich nicht mehr daran erinnern, dass es das Thema dazu "Modular Exponentiation" heißt.

Das könnte dir evtl. weiterhelfen ftp://ftp.rsasecurity.com/pub/pdfs/tr201.pdf

Achso wenn wir gleich dabei sind:
Modulo mit negativen Zahlen wird auch nicht "richtig" berechnet. Es kommt etwas negatives raus, ich glaube auch bei Java.
 
Zurück
Oben