Umgang mit Blocklänge in Node.js-Krypto-Streams

9

Ich möchte einen Eingabestream verschlüsseln und über TCP an einen anderen Server senden. So weit, ist es gut. Alles läuft reibungslos, bis die Verbindung geschlossen ist. In fast allen Fällen ist die benötigte Blockgröße von 192 Bit nicht erfüllt und das Skript stürzt mit wrong final block length ab, obwohl ich Auto Padding eingeschaltet habe.

Es scheint, als ob die automatische Auffüllung nur funktioniert, wenn die ältere Schnittstelle verwendet wird. Mache ich hier etwas falsch?

%Vor%

In meiner idealen Node.js-Welt würde der (De-) Cipher-Stream automatisch den letzten Block auffüllen, wenn der Quellstrom geschlossen ist. Ich denke, das ist ein Designfehler.

Abgesehen davon, dass ein Problem löst , wie kann ich dieses Verhalten umgehen? Muss ich einen Byte-Zähler zwischen Socket und (De-) Cipher Streams setzen?

    
buschtoens 27.05.2013, 14:21
quelle

1 Antwort

1

Sie haben Ihre Pfeifen so eingestellt:

%Vor%

Aber Sie umgehen die Verschlüsselung, indem Sie direkt in den Socket schreiben und sie so verwenden:

%Vor%

Versuchen Sie es mit diesem Code:

%Vor%

Zu Demonstrationszwecken habe ich die automatische Auffüllung vom Objekt Decryptor entfernt, damit Sie die verbleibende Auffüllung sehen können. Piping das Programm in xxd (an der Befehlszeile, nicht im Knoten) gibt mir diese Ausgabe:

%Vor%

Mit der 0x06 wurde 6 mal wiederholt.

    
ixe013 02.08.2013 05:27
quelle