Moin,
ich bin gerade dabei, ein Framework für meine Abschlussarbeit aufzubauen, wo ich RSA mit einem Post-Quantum-Algorithmus vergleiche im Bezug auf Laufzeit und Sicherheit. Soweit funktioniert das mit dem Ver- und Entschlüsseln auch, nur wenn ich beispielsweise die Schlüsselgröße 512 neheme und eine etwas längere Nachricht verschlüsseln möchte, wird die javax.crypto.IllegalBlockSizeException: Data must not be longer than 53bytes Exception geworfen.
[CODE lang="java" title="Schlüsselerzeugung"]public static void generate(int keylen)
{
KeyPairGenerator keygen = null;
try
{
keygen = KeyPairGenerator.getInstance("RSA");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
//Schlüsselgröße initialisiernen
keygen.initialize(keylen);
key = keygen.generateKeyPair();
}[/CODE]
Ich weiß, dass der RSA-Algorithmus nur Daten verschlüsseln kann, deren maximale Bytelänge der RSA-Schlüssellänge in Bits geteilt durch acht minus elf Füllbytes entspricht, d. h. Anzahl der maximalen Bytes = Schlüssellänge in Bits / 8 - 11. Somit kommt auch die 53 zustande.
[CODE lang="java" title="encrypt-Methode"] public static byte[] encrypt(String message, PublicKey pk)
{
Cipher cipher = null;
try
{
cipher = Cipher.getInstance("RSA/ECB/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, pk);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
byte[] geheimtext = null;
try {
geheimtext = cipher.doFinal(message.getBytes(StandardCharsets.UTF_8));
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return geheimtext;
}[/CODE]
Ich hab RSA/ECB/NoPadding genutzt, somit fällt das Padding weg. Aber meine Frage, wie kann ich denn größere Nachrichten verschlüsseln, ohne das diese Exception geworfen wird?
ich bin gerade dabei, ein Framework für meine Abschlussarbeit aufzubauen, wo ich RSA mit einem Post-Quantum-Algorithmus vergleiche im Bezug auf Laufzeit und Sicherheit. Soweit funktioniert das mit dem Ver- und Entschlüsseln auch, nur wenn ich beispielsweise die Schlüsselgröße 512 neheme und eine etwas längere Nachricht verschlüsseln möchte, wird die javax.crypto.IllegalBlockSizeException: Data must not be longer than 53bytes Exception geworfen.
[CODE lang="java" title="Schlüsselerzeugung"]public static void generate(int keylen)
{
KeyPairGenerator keygen = null;
try
{
keygen = KeyPairGenerator.getInstance("RSA");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
//Schlüsselgröße initialisiernen
keygen.initialize(keylen);
key = keygen.generateKeyPair();
}[/CODE]
Ich weiß, dass der RSA-Algorithmus nur Daten verschlüsseln kann, deren maximale Bytelänge der RSA-Schlüssellänge in Bits geteilt durch acht minus elf Füllbytes entspricht, d. h. Anzahl der maximalen Bytes = Schlüssellänge in Bits / 8 - 11. Somit kommt auch die 53 zustande.
[CODE lang="java" title="encrypt-Methode"] public static byte[] encrypt(String message, PublicKey pk)
{
Cipher cipher = null;
try
{
cipher = Cipher.getInstance("RSA/ECB/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, pk);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
byte[] geheimtext = null;
try {
geheimtext = cipher.doFinal(message.getBytes(StandardCharsets.UTF_8));
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return geheimtext;
}[/CODE]
Ich hab RSA/ECB/NoPadding genutzt, somit fällt das Padding weg. Aber meine Frage, wie kann ich denn größere Nachrichten verschlüsseln, ohne das diese Exception geworfen wird?