2016-08-12 1 views
0

Hier ist der Deal:Datenverlust, wenn es um Cipher.update vorbei, während DER mit (Node.js)

Ich habe einen Puffer von Daten wie folgt strukturiert:

[39 bytes of header] + [body] + [padding] (von mir berechnet). Wenn ich es in einer Datei speichern, kann ich tatsächlich die Struktur erkennen, und alles scheint in Ordnung zu sein.

Dann habe ich auf DES-CBC encrypt diesem Puffer, und dem, was ich tue, ist

a) Instanziieren des DES-Wrapper, der einen Schlüssel hat, und berechnet eine neue IV (autoPadding: false auf dem Cipher Objekt es schafft, auch)
b) dem dES den Puffer übergeben wrapper
c) der Puffer dann verschlüsselt wird, wie folgt: (Daten der Puffer, en ist das Cipher-Objekt)

var buf1 = en.update(data); 

Wenn ich Ausgabe buf1 auf einer Datei (und dann, in meinem Fall, auf einem Sockel) und seine Bytes abrufen, dann entschlüsseln, erhalte ich die folgende Struktur: [header][body] Aber wenn ich Daten über eine Datei ausgeben und es Bytes abrufen, bekomme ich die Startstruktur. Ich weiß, ich sollte auch en.final() an buf1 anhängen, aber in meinem Fall brauche ich diese Werte nicht, auch wenn AutoPadding falsch ist, würde es nur einen Fehler werfen.

+1

** Verwenden Sie nicht heute DES. ** Es bietet nur 56 Bit Sicherheit. AES wäre viel besser, weil es mit der niedrigsten Schlüsselgröße von 128 Bit sicherer ist. Es gibt auch eine praktische Grenze für die maximale Chiffretextgröße mit DES. Siehe [Sicherheitsvergleich von 3DES und AES] (http://security.stackexchange.com/q/26179/45523). –

+0

Danke, Artjom, das ist mir bewusst, aber ich muss jetzt DES verwenden. – ProTheJoker

Antwort

2

Die API bietet Ihnen einen Vertrag. Eine der Eigenschaften des Vertrags ist, dass Sie Cipher#final([output_encoding]) aufrufen müssen, wenn Sie die Verschlüsselung abgeschlossen haben. Auch wenn das Padding nicht von der Cipher-Instanz verarbeitet werden muss, wird der Code für die Wiederverwendbarkeit geschrieben und erwartet daher, dass er unabhängig von den Fülloptionen auf die gleiche Weise verwendet wird.

+0

Vielen Dank für diesen Tipp, ich dachte schon darüber nach, bevor Sie es gepostet haben und war im Begriff, die Frage zu schließen. Tatsache ist, dass das Finale bietet meine "benutzerdefinierte" Polsterung und DES-Polsterung auch, die ich mit Scheibe entfernen und erhalten, was ich begehre ^^ Vielen Dank! – ProTheJoker

Verwandte Themen