Ich habe folgenden Code verwendet, um die Daten zu verschlüsseln. Meine Eingabe ist 16 Bytes und Schlüssel ist 16 Bytes, aber die Ausgabe, die ich bekomme (verschlüsselte Daten) ist 32 Bytes. Warum?Warum erweitert die AES 128-Verschlüsselung die Daten?
public static byte[] encrypt(byte[] plainText, byte[] key) {
try {
byte[] passwordKey128 = Arrays.copyOfRange(key, 0, 16);
SecretKeySpec secretKey = new SecretKeySpec(passwordKey128, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] cipherText = cipher.doFinal(plainText);
// String encryptedString = Base64.getEncoder().encodeToString(cipherText);
return cipherText;
Was kann der Grund sein? Fügt AES Daten hinzu?
Mögliche Duplikate von [Wohin mit Informationen über die Fülllänge?] (Http://stackoverflow.com/questions/26930911/where-to-put-information-about-padding-length) –
Gemäß Standard hat AES eine Blockgröße von 128 Bit. Mit anderen Worten, andere Blockgrößen sind nicht standardisiert. Sie zitieren nicht, was die Funktion des Softwareentwicklers "cipher.doFinal()" tut. Also, IMHO ist es besser, den Entwickler Ihrer Software zu bitten, das von Ihnen beobachtete Phänomen zu erklären. –
Allgemeine Hinweise: ** Verwenden Sie immer einen vollständig qualifizierten Cipher-String. ** 'Cipher.getInstance (" AES ");' kann abhängig vom Standard-Sicherheitsanbieter zu unterschiedlichen Verschlüsselungen führen. Es führt höchstwahrscheinlich zu "AES/ECB/PKCS5Padding", aber das muss nicht sein. Wenn es sich ändert, werden Sie die Kompatibilität zwischen verschiedenen JVMs verlieren. –