Knobi-Wan
Lt. Junior Grade
- Registriert
- März 2008
- Beiträge
- 355
Hallo,
folgendes Problem: Ich soll eine Klasse schreiben, die ein JFrame erstellt und mit RSA verschlüsseln kann. So weit, so gut. Den Text, der in dem JTextField-Eingabefenster steht, wird an folgende Methode übergeben:
Output in der Konsole ist hier aber für input = "k":
maxblocklänge 15
blockzahl 0
block 107
encoded block 118904571616129635632380305823567246620
decoded block 107
ss ?
läuft also nicht besonders gut. Auffallend ist, dass es funktioniert, wenn ich statt UTF-16BE UTF-8 benutze:
maxblocklänge 15
blockzahl 0
block 107
encoded block 20594889241748384884808005460238237006
decoded block 107
ss k
Frage jetzt:
Wie kann das sein und wie lässt sich das lösen, da ich schon ganz gerne UTF-16 benutzen würde.
folgendes Problem: Ich soll eine Klasse schreiben, die ein JFrame erstellt und mit RSA verschlüsseln kann. So weit, so gut. Den Text, der in dem JTextField-Eingabefenster steht, wird an folgende Methode übergeben:
Code:
private String encodeInput(String input){
int maxblocklaenge=(mod.bitLength()-1)/16;
System.out.println("maxblocklänge "+maxblocklaenge);
int blockzahl=input.length()/maxblocklaenge;
System.out.println("blockzahl "+blockzahl);
String s="";
try{
for(int a=0; a<blockzahl; a++){ //konvertiert jeden Block zu einem BigInteger, verschlüsselt es und fügt es dem String s hinzu
BigInteger block=new BigInteger(input.substring(maxblocklaenge*a+a, maxblocklaenge*(a+1)+a).getBytes("UTF-16BE"));
block.modPow(publicKey, mod);
s+=new String(block.toByteArray(), "UTF-16BE");
System.out.println(s);
}
BigInteger block=new BigInteger(input.substring(maxblocklaenge*blockzahl+blockzahl, input.length()).getBytes("UTF-16BE"));
System.out.println("block "+block);
block=block.modPow(publicKey, mod);
System.out.println("encoded block "+block);
block=block.modPow(privateKey, mod);
System.out.println("decoded block "+block);
String ss=new String(block.toByteArray(), "UTF-16BE");
System.out.println("ss "+ss);
s+=ss;
}
catch(UnsupportedEncodingException ex){
ex.printStackTrace();
}
return s;
}
Output in der Konsole ist hier aber für input = "k":
maxblocklänge 15
blockzahl 0
block 107
encoded block 118904571616129635632380305823567246620
decoded block 107
ss ?
läuft also nicht besonders gut. Auffallend ist, dass es funktioniert, wenn ich statt UTF-16BE UTF-8 benutze:
maxblocklänge 15
blockzahl 0
block 107
encoded block 20594889241748384884808005460238237006
decoded block 107
ss k
Frage jetzt:
Wie kann das sein und wie lässt sich das lösen, da ich schon ganz gerne UTF-16 benutzen würde.
Zuletzt bearbeitet: