Hey, ich habe folgenden Code:
Der Code, soll den test-String "Dude ist so verdammt cool, das sich die bäume bewegen im wind der gezeiten." mit RSA verschlüsseln, anschließend wieder entschlüsseln und ausgeben. Jedoch wird folgende Exception geworfen
Wie man ersehen kann ist der String zu lang und es läuft beim doFinal der encryption Methode was fehl.
Der String "horst" wird ohne Probleme ver- und ent-schlüsselt.
Nun muss ich jedoch auch längere Nachrichten (strings) verschlüsseln können.
Vielleicht hat einer von euch nen Plan, wodran es scheitert.
Java:
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.Cipher;
public class RSACrypt {
public byte[] decrypt(Key privateKey, byte[] encrypted)
{
try
{
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
cipher.update(encrypted);
return cipher.doFinal();
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
public byte[] encrypt(Key publickey, byte[] inputFile)
{
try
{
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publickey);
cipher.update(inputFile);
return cipher.doFinal();
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
/**
* @param args
*/
public static void main(String[] args) {
KeyPairGenerator pairgen;
try {
pairgen = KeyPairGenerator.getInstance("RSA");
SecureRandom random = new SecureRandom();
pairgen.initialize(512, random);
KeyPair keyPair = pairgen.generateKeyPair();
Key publicKey = keyPair.getPublic();
Key privateKey = keyPair.getPrivate();
// System.out.println("pub:"+ publicKey);
// System.err.println("priv:"+ privateKey);
RSACrypt cryptor = new RSACrypt();
byte[] encrypted = cryptor.encrypt(publicKey, "Dude ist so verdammt cool, das sich die bäume bewegen im wind der gezeiten.".getBytes());
System.out.println(new String(encrypted));
byte[] decrypted = cryptor.decrypt(privateKey, encrypted);
System.out.println(new String(decrypted));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}
Der Code, soll den test-String "Dude ist so verdammt cool, das sich die bäume bewegen im wind der gezeiten." mit RSA verschlüsseln, anschließend wieder entschlüsseln und ausgeben. Jedoch wird folgende Exception geworfen
Code:
javax.crypto.IllegalBlockSizeException: Data must not be longer than 53 bytes
at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:338)
at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:383)
at javax.crypto.Cipher.doFinal(Cipher.java:1708)
at test.RSACrypt.encrypt(RSACrypt.java:34)
at test.RSACrypt.main(RSACrypt.java:63)
Exception in thread "main" java.lang.NullPointerException
at java.lang.String.<init>(String.java:601)
at test.RSACrypt.main(RSACrypt.java:64)
Wie man ersehen kann ist der String zu lang und es läuft beim doFinal der encryption Methode was fehl.
Der String "horst" wird ohne Probleme ver- und ent-schlüsselt.
Nun muss ich jedoch auch längere Nachrichten (strings) verschlüsseln können.
Vielleicht hat einer von euch nen Plan, wodran es scheitert.