Ich implementiere Verschlüsselung / Entschlüsselung mit Java Cipher und AES. Alles funktioniert gut, außer dass 5 zusätzliche Bytes für den Aufruf von doFinal () geschrieben wurden. Also, ich am Ende mit einer korrekt dekodierten Zeichenfolge mit 5 zusätzlichen Bytes angehängt.
Ich glaube der Grund ist, dass der ganze Block von 16 Bytes geschrieben wird. Ich sehe 3 16-Byte-Blöcke geschrieben, einschließlich der letzten. Die Eingabe verschlüsselte Datei ist 64-Byte. Der unverschlüsselte Text sollte 43 Bytes lang sein.
Die Dokumentation für doFinal gibt an, dass die Anzahl der in den Ausgabepuffer geschriebenen Bytes zurückgegeben werden kann. Es ist jedoch 0,16,16,16. Ich habe jede Form von DoFinal ausprobiert und aktualisiert und bekomme keine Verhaltensänderung.
Es macht einen Sinn, dass ein Vollblock geschrieben wird, denn so funktionieren die meisten dieser Algorithmen. Wenn ich jedoch nicht die Größe der Ausgabedaten angeben kann, wie soll ich dann überflüssige Daten verhindern?
Sollte ich vielleicht einen anderen Algorithmus verwenden? AES256 ist eine Voraussetzung, aber ich frage mich, ob ein anderer Block-Typ oder Padding-Typ es erlauben könnte, die richtige Anzahl von Bytes zu schreiben.
Irgendwelche Hinweise?
Für (einige) Kürze eingeschränkt:
%Vor%Geschäftsteil der Entschlüsselungsroutine.
%Vor%Sie müssen einen Auffüllmechanismus angeben, wenn Sie Cipher.getInstance () aufrufen - offensichtlich muss er sowohl bei der Verschlüsselung als auch bei der Entschlüsselung identisch sein. zB:
%Vor%Ohne einen Auffüllmechanismus hat die Entschlüsselungsseite keine Informationen darüber, wo sich das Ende des Klartexts befindet (innerhalb des letzten Blocks).
AES ist eine Blockchiffre , natürlich wird es Ihnen ganze Blöcke geben, genauso wie alle Blockchiffren.
Weitere Informationen finden Sie im Wikipedia-Artikel zu AES .
Sie sagten, Sie wollten, dass es die "korrekte Anzahl von Bytes" ausgibt. Wie haben Sie entschieden, was die richtige Anzahl von Bytes ist?
Tags und Links java encryption aes