AES Verschlüsselung nur bis 63 Zeichen Länge

GoetzEisenfaust

Neues Mitglied
Hallo liebes Forum,

in PHP verschlüssele bzw. entschlüssele ich einen Text folgendermaßen:
Code:
<?php
class EncryptionService{
	private $key;

	public function __construct($key){
		$this->key = base64_decode($key);
	}

	public function encrypt($input) {
		return base64_encode(
		mcrypt_encrypt(
		MCRYPT_RIJNDAEL_128,
		$this->key,
		$this->pkcs5_pad($input, 16),
		MCRYPT_MODE_ECB
		)
		);
	}

	public function decrypt($input) {
		return trim(mcrypt_decrypt(
		MCRYPT_RIJNDAEL_128,
		$this->key,
		base64_decode($input),
		MCRYPT_MODE_ECB
		), "\x00..\x1F"); // alle ASCII-Steuerzeichen abschneiden
	}
	private function pkcs5_pad ($text, $blocksize) {
		$pad = $blocksize - (strlen($text) % $blocksize);
		return $text . str_repeat(chr($pad), $pad);
	}
}

Die verschlüsselte Nachricht wir dann über das Netzwerk an meinen Java-Server gesendet und wie folgt entschlüsselt:
Java:
package crypt;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

import org.drools.util.codec.Base64;

public class EncryptionService {

	private final String key;

	public EncryptionService(String key) {
		this.key = key;
	}

	public String crypt(String input) throws Exception {
		byte[] crypted = null;
		SecretKeySpec skey = new SecretKeySpec(Base64.decodeBase64(this.key), "AES");
		Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
		cipher.init(Cipher.ENCRYPT_MODE, skey);
		crypted = cipher.doFinal(input.getBytes());

		return Base64.encodeBase64String(crypted);
	}

	public String decrypt(String input) throws Exception {
		byte[] output = null;
		SecretKeySpec skey = new SecretKeySpec(Base64.decodeBase64(this.key), "AES");
		Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
		cipher.init(Cipher.DECRYPT_MODE, skey);
		output = cipher.doFinal(Base64.decodeBase64(input));
		return new String(output);
	}
}

Ich kann so Nachrichten wunderbar hin und herschicken, sofern die Länge der Nachricht <64 Zeichen bleibt. Anderfalls bekomme ich eine
javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipher

Ich kann mir nicht erklären, wo da das Problem liegt. Die von PHP verschlüsselten Nachrichten kann ich mit PHP auch wieder erfolgreich entschlüsseln. Warum nicht in Java? Warum meint Java, dass die Nachricht nicht die blocksize 16 hat?

Vielen Dank für Hilfe :)

Gruß Goetz
 
A

AESCrypto

Gast
Das Problem ist das du direkt doFinal() callst. Wenn du längere Daten verschlüsseln willst musst du mit update() arbeiten und die Blöcke selbst teilen. Ich hatte dazu mal n super Code, ist aber leider verschollen gegangen. Auf jeden Fall ziemlich kompliziert mit getBlockSize() und getOutputSize() ... vielleicht findest du ja mit diesen Begriffen was bei GooGLe. Außerdem würde ich wenn du schon mit PKCS5 arbeitest eher CBC anstatt ECB nehmen und das ganze als Stream-Cipher bauen. Wie weit PHP da mit macht kann ich so leider nicht sagen.
 

GoetzEisenfaust

Neues Mitglied
Danke schonmal für die Hilfe,

ich habe jetzt noch ein paar interessante Fakten festgestellt.
- Wenn ich einen String mit mehr als 63 Zeichen in Java mit der im ersten Beitrag gezeigten Klasse verschlüssele, dann kann ich ihn einwandfrei wieder entschlüsseln.

- Wenn ich einen Text mit mehr als 63 Zeichen in PHP und in Java verschlüssele, dann bekomme ich in beiden Sprachen den gleichen Base64-encodeten Text heraus.

Kann es sein, dass durch das Schicken über die Leitung der verschlüsselte Text minimal verändert wird und das zum Problem führt?

Edit: Meine Vermutung hat sich bestätigt. :D

Ich habe folgende Zeilen zum Auslesen der Nachricht aus dem InputStream verwendet:
Java:
char[] buffer = new char[2000];
int anzahlZeichen = bufferedReader.read(buffer, 0, 100);
String nachricht = new String(buffer, 0, anzahlZeichen);

Klar, dass die ankommende Base64-encodete Zeichenkette nicht größer als 100 Zeichen wird. :oops:

Das Problem ist damit also gelöst. ^^

Danke Goetz
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14
X Verschlüsselung Allgemeine Java-Themen 18
P String-Verschlüsselung - Frage zur Sicherheit Allgemeine Java-Themen 21
R Verschlüsselung falsch Allgemeine Java-Themen 3
R Verschlüsselung funktioniert nicht Allgemeine Java-Themen 5
J Passwort Verschlüsselung hash Allgemeine Java-Themen 2
D AES Verschlüsselung / Wirklich AES 128-Bit? Allgemeine Java-Themen 4
I Best Practice Verschlüsselung mit SALT Allgemeine Java-Themen 4
A Mehrfache XOR Verschlüsselung Allgemeine Java-Themen 11
Thallius Moderne sichere synchrone Verschlüsselung mit Java? Allgemeine Java-Themen 3
Ananaskirsche Verschlüsselung mit AES Allgemeine Java-Themen 4
E Verschlüsselung Allgemeine Java-Themen 4
F Schlüsselworte RSA Verschlüsselung implementieren Allgemeine Java-Themen 5
S Key (für AES-Verschlüsselung) aus String Allgemeine Java-Themen 4
M Serialisierung & Verschlüsselung Allgemeine Java-Themen 2
K Problem mit Salted - Verschlüsselung Allgemeine Java-Themen 4
Z Java E-Mail Client mit End-to-End-Verschlüsselung Allgemeine Java-Themen 4
J Verschlüsselung von Text? Allgemeine Java-Themen 2
K Vigenere- Verschlüsselung Allgemeine Java-Themen 13
M Verschlüsselung von Text und Files durch RSA (Encoding Problem) Allgemeine Java-Themen 7
T AES-Verschlüsselung mit eigenem 256 Bit Schlüssel Allgemeine Java-Themen 12
DStrohma Verschlüsselung: SALT aus Passwort generieren? Allgemeine Java-Themen 3
M Verschlüsselung mit Cipher Allgemeine Java-Themen 5
B XOR Verschlüsselung Allgemeine Java-Themen 7
S Framework für symetrische und asymetrische Verschlüsselung Allgemeine Java-Themen 3
lumo Verschlüsselung Allgemeine Java-Themen 2
H Verschlüsselung mit Blowfish Allgemeine Java-Themen 14
C Interpreter-Fehler AES verschlüsselung mit MD5 key Allgemeine Java-Themen 6
S AES Verschlüsselung - File Headers korrupt Allgemeine Java-Themen 10
A Datei, UTF-8, NTRU-Verschlüsselung Allgemeine Java-Themen 3
B "Verschlüsselung" mit Passwort (XOR bzw. Modulo) Allgemeine Java-Themen 7
B String Verschlüsselung Allgemeine Java-Themen 6
M Verschlüsselung anwenden Allgemeine Java-Themen 6
J Verschlüsselung Allgemeine Java-Themen 22
T MD5 Verschlüsselung Nullen fehlen? Allgemeine Java-Themen 2
L [Exception] RSA Verschlüsselung. Allgemeine Java-Themen 16
C javamail signatur und verschlüsselung Allgemeine Java-Themen 2
R 128 Bit Verschlüsselung/Entschlüsselung in Java? Allgemeine Java-Themen 6
F RSA-Verschlüsselung Allgemeine Java-Themen 4
S Verschlüsselung in Java Allgemeine Java-Themen 2
G Interessant! Verschlüsselung in Java, Charset in der JVM? Allgemeine Java-Themen 14
D Eigener Key bei AES Verschlüsselung Allgemeine Java-Themen 4
T Verschlüsselung von Dateien Allgemeine Java-Themen 8
S Verschlüsselung - IllegalBlockSizeException Allgemeine Java-Themen 3
G Problem mit RSA Verschlüsselung bei .net und Java Allgemeine Java-Themen 1
D Caesar und Vigenère Verschlüsselung Allgemeine Java-Themen 2
alexpetri Verschlüsselung Allgemeine Java-Themen 13
@ [Sicherheit] Speicherung von Keys für Verschlüsselung Allgemeine Java-Themen 4
P Verschlüsselung in PHP -> Entschlüsselung in Java Allgemeine Java-Themen 2
Lazybone Caeser Verschlüsselung Allgemeine Java-Themen 6
S Verschlüsselung mit Cipher Allgemeine Java-Themen 8
S Verschlüsselung Allgemeine Java-Themen 15
J Problem mit Dateien/XOR-Verschlüsselung Allgemeine Java-Themen 5
G RSA-Verschlüsselung Allgemeine Java-Themen 1
P HMACMD5- Verschlüsselung entschlüsseln Allgemeine Java-Themen 2
I Verschlüsselung mit Pwd. - User soll Algorithmus wählen Allgemeine Java-Themen 4
J Probleme bei XOR verschlüsselung ! Allgemeine Java-Themen 5
G Verschlüsselung in Java Allgemeine Java-Themen 9
M RSA Verschlüsselung Allgemeine Java-Themen 7
J Verschlüsselung von Daten Allgemeine Java-Themen 21
MarvinsDepression Unbekanntes Zeichen in fremden Code wirft Fragen auf Allgemeine Java-Themen 4
S Zeichen | in regex Allgemeine Java-Themen 8
_user_q JavaFX Robot alle Unicode-Zeichen schreiben lassen können Allgemeine Java-Themen 12
T Komische Zeichen im Zusammenhang mit Serializable interface Allgemeine Java-Themen 13
M Checkstyle 100 Zeichen pro Zeile Allgemeine Java-Themen 11
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14
Master3000 Komisches Zeichen als Ausgabe in der Konsole Allgemeine Java-Themen 20
M Warum gibt es Unterschiedliche Kommentar Zeichen Allgemeine Java-Themen 15
N Überprüfung ob ein bestimmtes Zeichen <1 mal vorkommt Allgemeine Java-Themen 2
N Prüfen, ob ein String 2x das selbe Zeichen hat Allgemeine Java-Themen 10
G Übermittlung zusätzlicher ASCII-Zeichen bei Übertragung von Dateiinhalt mit Xmodem - JAVA Allgemeine Java-Themen 9
R Wie bekomme ich das Zeichen 'digit' an vorderster Stelle Allgemeine Java-Themen 4
S [Regex] Nur diese Zeichen beachten Allgemeine Java-Themen 1
Bluedaishi Zeile um zeichen erweitern Allgemeine Java-Themen 9
N Datei Zeilenweise Einlesen, Versteckte Zeichen Allgemeine Java-Themen 5
Xge Replace x Zeichen aus String Allgemeine Java-Themen 2
S Java Editor Bekomme bei der Code-Vervollständigung die Zeichen &#8203; Allgemeine Java-Themen 3
E Compiler-Fehler Unicode Zeichen einlesen Allgemeine Java-Themen 1
U Variablen Stringarrays mit wenig verschiedenen Zeichen effizienter speichern Allgemeine Java-Themen 10
T xls-Datei per Apache Commons CsvParser einlesen UTF-8 Zeichen russische Zeichen Allgemeine Java-Themen 2
AssELAss String jeweils nach x Zeichen Zeilenumbruch Allgemeine Java-Themen 1
DStrohma Input/Output KeyEvent nur verarbeiten wenn es ein "sichtbares" Zeichen ist? Allgemeine Java-Themen 1
B In Java String ein + Zeichen Allgemeine Java-Themen 4
AssELAss Zeilenumbruch immer nach bestimmtem Zeichen Allgemeine Java-Themen 1
J Anzahl der Zeichen bei Eingabe begrenzen Allgemeine Java-Themen 5
V Tastendruck für UTF-8 Zeichen emulieren Allgemeine Java-Themen 4
B BufferedWriter in InputStream oder Zeichen-Stream in Byte-Stream Allgemeine Java-Themen 5
C Hex Zeichen ersetzen durch leer Zeichen Allgemeine Java-Themen 5
R Besondere Zeichen in Dateinamen Allgemeine Java-Themen 4
B Alt-Griechisch Zeichen in Dateien Allgemeine Java-Themen 2
M Fehlende Zeichen beim Drucken mit PDFBox Allgemeine Java-Themen 10
J String nur erste Zeichen vergleichen Allgemeine Java-Themen 6
C Variablen $-Zeichen in String ersetzen Allgemeine Java-Themen 3
S String Zeichen für Zeichen vergleichen Allgemeine Java-Themen 4
L Problem bei ausführbarer jar Datei mit Unicode-Zeichen Allgemeine Java-Themen 4
S String in Double - letztes Zeichen fehlt Allgemeine Java-Themen 4
A Erstes Zeichen im String "toUpperCase"n Allgemeine Java-Themen 11
A Umwandlung von Text/Zeichen in Polynome Allgemeine Java-Themen 8
cedi int Zahl in ein ASCII zeichen umwandeln und dieses in ein externes Textfenster schreiben Allgemeine Java-Themen 6
K String: alle X Zeichen Zeilenumbruch Allgemeine Java-Themen 3

Ähnliche Java Themen


Oben