ich habe ein Problem und zwar würde ich gerne ein Applet für eine einfache RSA Verschlüsselung programmieren. Aber halt alles manuell und keine automatisierten Schlüsselpaare. Also man wählt in 2 Comboboxes 2 Primzahlen aus und dann werden die übrigen Schlüssel erzeugt.
So nun kommen wir zum Verschlüsseln, dass funktioniert auch noch.
So sagen wir aus A wird 2730 p= 89 q=47. So das wird im Geheimtextfeld angezeigt. Nun hab ich das Problem das meine Methode nur die 2 entschlüsseln würde dann die 7 usw.
Sind halt Knöpfe die die ganze Berechnung eileiten. So nun die Frage wie sorge ich dafür das er die ganze Zahl nimmt und später wenn es ganze Texte werden?
Ich fürchte, deine Verschlüsselung scheitert selbst schon bei 8 Bit-Schlüsseln.
Z.B.:
e = 23
d = 47
N = 143
k = 41 ('A')
[c]Math.pow(41, 23) % 143[/c] ergibt zwar 63 (statt 72), aber hast du auch mal die Gegenrechnung nachvollzogen? [c]Math.pow(63, 47) % 143[/c] ergibt nämlich 11 statt 41. Könnte evtl. daran liegen, dass die pow-Ergebnisse zuweilen kaum in ein int passen.
Ich bin ja in der API unterwegs nur da dort keine Befehle stehen dachte ich mir ich frage einfach. Da bei mir aus Comboboxen Werte ausgewählt werden muss ich ja mit dennen rechnen.
Es muss doch eine möglichkeit geben, dass ich die Integerwerte in einen BigIntegerwert bekomme. Oder alles BigInteger habe und dann das Object aus der Combobox in einen BigInteger kriege.
Der Teil wo es verschlüsselt ist meine ich ohne große Fehler. Nun aber der entschlüssel Teil funktioniert gar nicht.
Die erste Bedingung in der For-Schleife soll halt dafür sorgen sagen wir wir haben den Block
2472' ' dann sollte die 6te Stelle doch den Wert null haben oder?
Dann weiter !=" " soll Leerzeichen filtern so das in block wirklich 2472 steht und dann erst die Formel angewandt wird.
Diese subString-Methode nutzt dir so überhaupt nichts. Ausserdem entschlüsselst du auch wieder mit e. Die charAt-Methode hätte es aber bereits bringen müssen. Möglicherweise lässt sich der Schlüsseltext auch nicht mehr als String darstellen, da für das Standardencoding ungültige (nicht darstellbare) Zeichen entstehen können. In diesem Fall müsste (das eigentlich der Normalfall) der Klartext in eine Bytefolge und diese evtl. per Base32, -64 oder -128 encodiert werden. Beim Entschlüsseln muss dieses Encoding natürlich auch wieder beachtet werden.
Hab Substring nun so geändert das es immer (x-1),(x+1) ist also sollte so doch genau der Buchstabe an der Stelle X gewählt sein.
Dann hab ich e durch d getauscht dummer Fehler.
Dann versteh ich nicht ganz was du mit dem letzten Teil deiner Antwort meinst.
Aus 2742 wird ja wieder ich sag mal 65 und das sollte doch als String darstellbar sein.
Funktioniert so einwandfrei. Danke umwandlung wieder in Buchstaben ging auch ganz schnell.
Nur wenn du mir noch beantworten könntest warum meine Version nicht ging wäre ich dir sehr dankbar.
Und ja mit dem Leerzeichen, dass mach ich, weil es nur eine stark vereinfachte Darstellung ist.
... substring(x, x) bzw. in deinem Fall substring(y, y) oder substring(i, i) liefert stets einen Leerstring. Bei dir werden i und y irgendwann grösser als die länge der Strings und das ergibt in beiden Fällen eine Exception (StringIndexOutOfBoundsException).