webentwicklung-frage-antwort-db.com.de

Wie Base64-Codierung in node.js tun?

Verfügt node.js bereits über eine integrierte Base64-Codierung?

Der Grund, warum ich das frage, ist, dass final() von crypto nur Hex-, Binär- oder ASCII-Daten ausgeben kann. Zum Beispiel:

var cipher = crypto.createCipheriv('des-ede3-cbc', encryption_key, iv);
var ciph = cipher.update(plaintext, 'utf8', 'hex');
ciph += cipher.final('hex');

var decipher = crypto.createDecipheriv('des-ede3-cbc', encryption_key, iv);
var txt = decipher.update(ciph, 'hex', 'utf8');
txt += decipher.final('utf8');

Gemäß den Dokumenten kann update() base64-codierte Daten ausgeben. final() unterstützt jedoch nicht base64. Ich habe es versucht und es wird brechen.

Wenn ich das mache:

var ciph = cipher.update(plaintext, 'utf8', 'base64');
    ciph += cipher.final('hex');

Was soll ich dann zur Entschlüsselung verwenden? Hex oder Base64?

Daher suche ich nach einer Funktion zum Base64-Codieren meiner verschlüsselten Hex-Ausgabe.

Vielen Dank.

758
murvinlai

Puffer kann verwendet werden, um eine Zeichenfolge oder ein Datenelement zu nehmen und das Ergebnis mit base64 zu codieren. Zum Beispiel:

> console.log(Buffer.from("Hello World").toString('base64'));
SGVsbG8gV29ybGQ=
> console.log(Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii'))
Hello World

Puffer sind ein globales Objekt, daher ist keine Anforderung erforderlich. Mit Zeichenfolgen erstellte Puffer können mit einem optionalen Codierungsparameter angegeben werden, in welcher Codierung sich die Zeichenfolge befindet. Die verfügbaren Konstruktorkodierungen toString und Buffer lauten wie folgt:

'ascii' - nur für 7-Bit-ASCII-Daten. Diese Codierungsmethode ist sehr schnell und entfernt das High-Bit, wenn es gesetzt ist.

'utf8' - Multibyte-codierte Unicode-Zeichen. Viele Webseiten und andere Dokumentformate verwenden UTF-8.

'ucs2' - 2 Byte, Little-Endian-codierte Unicode-Zeichen. Es kann nur BMP (Basic Multilingual Plane, U + 0000 - U + FFFF) codieren.

'base64' - Base64-Zeichenfolgencodierung.

'binary' - Eine Methode zum Codieren von Binärdaten in Zeichenfolgen, indem nur die ersten 8 Bits jedes Zeichens verwendet werden. Diese Codierungsmethode ist veraltet und sollte nach Möglichkeit zugunsten von Pufferobjekten vermieden werden. Diese Kodierung wird in zukünftigen Versionen von Node entfernt.

1791
onteria_

Die akzeptierte Antwort enthält ein Sicherheitsproblem in Knotenversionen größer als 6 (obwohl es für diesen Verwendungszweck wahrscheinlich ist, dass die Eingabe immer in eine Zeichenfolge umgewandelt werden kann).

Der Konstruktor Buffer ist gemäß Dokumentation veraltet.

Here ist ein Beispiel für eine Sicherheitsanfälligkeit, die sich aus der Verwendung in der ws-Bibliothek ergeben kann.

Die Code-Schnipsel sollten lauten:

console.log(Buffer.from("Hello World").toString('base64'));
console.log(Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii'));
198
NotJavanese

crypto unterstützt jetzt base64 ( reference ):

cipher.final('base64') 

Sie können also einfach Folgendes tun:

var cipher = crypto.createCipheriv('des-ede3-cbc', encryption_key, iv);
var ciph = cipher.update(plaintext, 'utf8', 'base64');
ciph += cipher.final('base64');

var decipher = crypto.createDecipheriv('des-ede3-cbc', encryption_key, iv);
var txt = decipher.update(ciph, 'base64', 'utf8');
txt += decipher.final('utf8');
40
Javier Ferrero

Ich benutze folgenden Code, um Base64-Zeichenfolge in Node API NodeJS Version 10.7.0 zu dekodieren

let data = 'c3RhY2thYnVzZS5jb20=';  // Base64 string
let buff = new Buffer(data, 'base64');  //Buffer
let text = buff.toString('ascii');  //this is the data type that you want your Base64 data to convert to
console.log('"' + data + '" converted from Base64 to ASCII is "' + text + '"'); 

Bitte versuchen Sie nicht, den obigen Code in der Konsole des Browsers auszuführen, da dies nicht funktioniert. Fügen Sie den Code in die serverseitigen Dateien von nodejs ein. Ich verwende obigen Code in der API-Entwicklung.

0