2016-05-10 10 views
0

ich ohne Polsterung Blowfish Java Verschlüsselung verwenden Datei in Folge zu verschlüsseln:Löschen von zusätzlichen Bytes aus entschlüsselte Datei

  • Sitzung generieren Schlüssel
  • mit Datei-Header (Algorithmen, Schlüssellänge, Modus, verschlüsselte Sitzungsschlüssel vorbereiten rsa öffentlicher Schlüssel)
  • verschlüsseln Datei mit Sitzungsschlüssel

inversen für die Entschlüsselung.

Ich end mit entschlüsselter Datei, die Größe = ursprüngliche Dateigröße + einige zusätzliche Bytes (Höhe abhängig von der ursprünglichen Dateigröße, Blockgröße usw.). Wie kann ich diese entschlüsselte Dateigröße = Original machen. Natürlich muss ich zusätzliche Bytes schneiden, aber wie kann ich erkennen, wie viele von ihnen ohne Wissen über die ursprüngliche Dateigröße.

Bearbeiten. Ich verwende Stromchiffre. Kein Padding und Blowfish muss sein, denn es ist ein Schulprojekt.

+0

Polster verwenden? die Größe in die Kopfzeile eintragen? –

+0

Ich möchte eine entschlüsselte Datei erzeugen, wenn jemand ein falsches Passwort einfügt, also kann ich keine Auffüllung verwenden. Auch die Größe der Datei ist in meinem Projekt nicht zulässig. –

+0

Wenn Sie einen falschen Entschlüsselungsschlüssel erkennen möchten, müssen Sie den verschlüsselten Daten eine Authentifizierung hinzufügen, normalerweise mit einem MAC, der den verschlüsselten Daten vorangestellt ist. Die Entschlüsselung selbst kann die falsche Entschlüsselung nicht feststellen. – zaph

Antwort

0

Blowfish ist Blockchiffre, also komprimiert es Blöcke. Seine Blockgröße beträgt 64 Bit. Wenn Sie versuchen, 65 Bits zu verschlüsseln (unabhängig davon, dass Sie Padding explizit nicht ausgewählt haben), beträgt die verschlüsselte Größe 128 Bit.

Wenn der verschlüsselte Text 65 Bit lang sein soll, müssen Sie die Stromchiffre verwenden.

+0

Stream-Chiffren sind schwer zu korrigieren, Padding ist die übliche Lösung. – zaph

+0

Wenn Sie manuell Padding überspringen, wird die Nullauffüllung automatisch angewendet. – joro

+0

Update in bearbeitetem Post –

0

Verwenden Sie den Counter-Modus (CTR), um das Auffüllen mit einer Block-Chiffre wie Blowfish zu vermeiden. Dies verwandelt eine Block-Chiffre effektiv in eine Stream-Chiffre. Anstatt das Padding auszuführen, wirfst du einfach den letzten Teil des generierten Bytestroms weg, so dass dein Chiffretext die gleiche Länge wie der ursprüngliche Klartext hat.

Sie können auch überprüfen, dass Ihr ciphertext nicht Dinge an der Vorderseite hinzugefügt hat, wie die Nonce. Das hätte den gleichen Effekt, den Chiffretext zu verlängern.

Wie bereits erwähnt, ist Blowfish keine gute Wahl. Verwenden Sie stattdessen AES oder einen der eSTREAM cyphers, wenn Sie eine tatsächliche Stream-Chiffre wünschen.