Ich bin gerade dabei in Java die RSA Verschlüsselung zu implementieren. Das Erstellen der Schlüssel dürfte soweit funktionieren (bin mal mit einem Debugger durchgegangen), Probleme habe ich allerdings dabei, wenn Text verschlüsselt werden soll. Ich bekomme als Ausgabe lauter Fragezeichen und im Debugger chinesische Schriftzeichen...
Ver- und Entschlüsselt wird mit den folgenden Methoden
Java:
publicString[]cipher(String text){//zerlegt in ZahlenfolgeBigInteger[] zahlen =CipherTools.split(text,modulus);//chiffriert jede Zahlfor(int i=0; i < zahlen.length; i++){
zahlen[i]= zahlen[i].modPow(privateExponent,modulus);}//gibt Folge von Zahlen ausString[] fertig =CipherTools.transform(zahlen);return fertig;}publicStringdecipher(String... text){//berechnet die Zahl c zu jedem Stueck TextBigInteger[] zahlen =CipherTools.transform(text);//dechiffriert jede Zahlfor(int i=0; i < zahlen.length; i++){
zahlen[i]= zahlen[i].modPow(privateExponent,modulus);}//gibt zusammenhaengenden Text ausreturnCipherTools.concat(CipherTools.transform(zahlen));}
split ist eine Methode, die Text in Zahlen umwandelt. transform sind Methoden, die Folgen von Zahlen in Folgen von Texten umwandeln bzw. umgekehrt und concat ist eine Methode, die aus einem Array von Texten (also String[]) wieder einen einzelnen erstellt (String).
Also CipherTools kenne ich persönlich nicht. Ist das 'ne eigene Klasse? Dann könnte es daran liegen, dass in den zu verschlüsselnden Texten Sonderzeichen verwendet werden und bei der Wandlung in BigInteger "<String>.getBytes()" ohne den Parameter Charset verwendet wird. Der BigInteger erhält deswegen einen falschen Wert.
In diesem Falle liegt es nahe, die Texte mal völlig unkonventionell in ein ByteArray zu wandeln und daraus die BigInteger zu erstellen.
Java:
importjava.nio.ByteBuffer;importjava.nio.CharBuffer;publicclassBufferTest{publicstaticvoidmain(String... args){char[] ch ="test".toCharArray();ByteBuffer bb =ByteBuffer.allocateDirect(ch.length *2);CharBuffer cb = bb.asCharBuffer();
cb.put(ch);byte[] by =newbyte[bb.capacity()];
bb.get(by);BigInteger out =newBigInteger(by);System.err.println(out);}}
Die Zurückwandlung in einen String funktioniert entsprechend umgekehrt. Das Ganze ist auch völlig unabhängig von irgendwelchen Zeichensätzen geschweige denn Sonderzeichen.
das war es nicht...schade. Naja diese Tools sind einfach nur Methoden mit denen Text zu Zahlen gemacht werden kann, umgekehrt das gleiche und Textteile zu einem String.
Okay, wenn ich drüber nachdenke, muss das nicht mal ein Fehler sein, weil es eben nur um die Verschlüsselung geht. Das Problem dabei ist ja, dass die verschlüsselten Zahlen mehr oder weniger zufällig sind und die daraus resultierenden Texte natürlich ebenso unleserlich. Solange aus dem verschlüsseltem Text per "decipher()" wieder der Klartext errechnet wird, ist alles in Ordnung.