2012-04-13 6 views
1

Ich verwende Amazon S3 zum Speichern von Dateien. Beim Speichern verschlüssele ich den Stream im laufenden Betrieb. Wieder beim Herunterladen entschlüssele ich den Stream im laufenden Betrieb. Diese Einrichtung funktioniert sehr gut, aber gelegentlich erhalte ich folgende Ausnahmen -Mögliche Gründe für javax.crypto.IllegalBlockSizeException

javax.crypto.IllegalBlockSizeException: Eingangslänge Vielfaches von 16 sein muss, wenn mit gepolstertem Chiffre

Entschlüsseln Was mögliche Gründe dafür sein könnte, Fehler zu passieren. Ist die Korruption von Daten beim Upload/Download eine der Möglichkeiten? Wenn ja, tritt dies nur auf, wenn die Füll-Bytes beschädigt sind oder eines der Bytes in der Datei beschädigt wurde?

[EDIT] Aber das Merkwürdige ist, dass die in S3 gespeicherte Dateigröße korrekt ist, es ist nicht so, als ob nur die Hälfte der Datei gespeichert würde.

+0

Erhalten Sie nur diese Padding-Ausnahme, oder erhalten Sie auch andere (illegale Padding-Ausnahmen)? –

+0

Ja, ich bekomme auch Padding-Ausnahmen - java.io.IOException: Fehler beim Schließen des Streams: javax.crypto.BadPaddingException: Gegeben ist der letzte Block nicht richtig gepolstert –

Antwort

1

Ja, ist es. Es ist sehr wahrscheinlich, dass Sie Teildateien erhalten. Sie sollten prüfen können, ob die Verbindung vor dem Abschluss abgebrochen wurde. Um sicherzustellen, dass Sie die vollständige, unveränderte Datei erhalten, fügen Sie eine (H) MAC hinzu oder verwenden Sie einen Chiffriermodus mit Integritätsüberprüfung (z. B. GCM).

[EDIT]: Nein, das insbesondere Entschlüsselung Ausnahme sollte nur dann geschehen, wenn die volle Datei nicht verfügbar ist, nicht, wenn die Datei selbst currupted wird. Überprüfen Sie besser die Dateibehandlung beim Empfang (vergessen Sie, Teildateien zu streamen oder zu löschen).

+0

Sind Sie sicher, dass Ihre Quelle Padding hinzufügt? Sind Sie sicher, dass Sie dieselbe Auffüllung wie Ihre Quelle verwenden? Nicht übereinstimmende Auffüllung kann dieses Problem verursachen. – rossum

+0

@ Rossum, warum antwortest du auf meine Antwort? Es scheint, dass der Fragesteller die Entschlüsselung auch selbst verschlüsselt ... –

+0

Ja, ich verschlüssele beim Put und Entschlüsseln beim Herunterladen und kümmere mich um das Padding. Dieses Problem tritt nur einmal in tausend Versuchen auf, andernfalls ist es erfolgreich. –