1274 Stimmen

Wie kann ich Base64-Kodierung in Node.js durchführen?

Hat Node.js bereits eine integrierte Base64-Kodierung?

Der Grund, warum ich das frage, ist, dass final() de crypto kann nur hexadezimale, binäre oder ASCII-Daten ausgeben. 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');

In der Dokumentation heißt es dazu, update() kann Base64-kodierte Daten ausgeben. Allerdings, final() unterstützt Base64 nicht. Ich habe es versucht und es wird nicht funktionieren.

Wenn ich das tue:

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

Was sollte ich dann für die Entschlüsselung verwenden? Hexadezimal oder Base64?

Deshalb suche ich nach einer Funktion, die meine verschlüsselte hexadezimale Ausgabe in Base64 kodiert.

14 Stimmen

Für jemanden, der dieses Problem in/nach 2016 sucht cipher.final('base64') Werke

0 Stimmen

Versuchen Sie base122 github.com/kevinAlbs/Base122

2799voto

onteria_ Punkte 64688

Puffer kann verwendet werden, um eine Zeichenkette oder ein Stück Daten zu nehmen und das Ergebnis in Base64 zu kodieren. 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, so dass kein Bedarf besteht. Puffer, die mit Strings erstellt werden, können einen optionalen Encoding-Parameter enthalten, der angibt, in welcher Kodierung der String vorliegt. Die verfügbaren toString y Buffer Konstruktorverschlüsselungen sind wie folgt:

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

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

ucs2" - 2-Byte, Little-Endian-kodierte Unicode-Zeichen. Es kann nur BMP (Basic Multilingual Plane, U+0000 - U+FFFF) kodieren.

base64' - Base64-Zeichenkettenkodierung.

binary" - Eine Art der Kodierung von Rohdaten Binärdaten in Zeichenketten, wobei nur die ersten 8 Bits jedes Zeichens Zeichen verwendet werden. Diese Kodierungsmethode ist veraltet und sollte vermieden werden zugunsten von zugunsten von Buffer-Objekten vermieden werden, wenn möglich. Diese Kodierung wird entfernt in zukünftigen Versionen von Node.

3 Stimmen

const atob = (data) => Buffer.from(data, 'base64').toString('ascii');

0 Stimmen

Die sein sollten .toString("binary") ( atob steht ja für ascii(base64) to binary)

0 Stimmen

@12Me21 Ich dachte, es steht für ascii to base64?

396voto

NotJavanese Punkte 3592

Die akzeptierte Antwort bisher enthalten new Buffer() was in Node.js-Versionen größer als 6 als Sicherheitsproblem angesehen wird (obwohl es für diesen Anwendungsfall wahrscheinlich ist, dass die Eingabe immer in einen String umgewandelt werden kann).

Le site Buffer Konstruktor ist veraltet gemäß die Dokumentation .

Die Codeschnipsel sollten lauten:

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

Nachdem diese Antwort geschrieben wurde, wurde sie aktualisiert und entspricht nun dieser.

0 Stimmen

Wenn ich versuche, Ihre erste Zeile zu verwenden, gibt Node zurück: [TypeError: this is not a typed array].

8 Stimmen

Dieser Fehler tritt bei Knotenversionen älter als v6 auf. In diesen Versionen müssen Sie den Konstruktor ( new Buffer ) und nicht Buffer.from .

0 Stimmen

Puffer.von() wurde in Version 4.5.0 hinzugefügt.

54voto

Javier Ferrero Punkte 8581

crypto unterstützt jetzt Base64 ( Referenz ):

cipher.final('base64')

Sie könnten also einfach 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');

4 Stimmen

Gibt es einen Grund, dies der Antwort von NotJavanese vorzuziehen?

3 Stimmen

Ich musste Verschlüsselungen zwischen Node und Python anpassen und diese Antwort hat mir eine Frage erspart! Danke :)

2 Stimmen

Dies ist falsch, da man nicht einfach mehrere base64-Strings aneinanderhängen kann, um einen korrekt verketteten base64-String zu erhalten. Dies funktioniert nur, wenn die Aktualisierungsfunktion Stücke der Länge durch 4 teilbar zurückgibt, wofür es keine Garantie gibt.

12voto

Vishal Thakur Punkte 1316

Puffer kann verwendet werden, um eine Zeichenkette oder ein Stück Daten zu nehmen und das Ergebnis in Base64 zu kodieren. Zum Beispiel:

Sie können Folgendes installieren Puffer über npm wie: npm i buffer --save

Sie können dies in Ihrem js Datei wie diese:

var buffer = require('buffer/').Buffer;

->> console.log(buffer.from("Hello Vishal Thakur").toString('base64'));
SGVsbG8gVmlzaGFsIFRoYWt1cg==  // Result

->> console.log(buffer.from("SGVsbG8gVmlzaGFsIFRoYWt1cg==", 'base64').toString('ascii'))
Hello Vishal Thakur   // Result

1 Stimmen

buffer sollte großgeschrieben werden, um Buffer

1 Stimmen

@RedwolfPrograms wie Sie sehen können, habe ich dies importiert require('buffer/').Buffer; Endlich können Sie sehen Buffer .

3voto

Devendra Chhaiya Punkte 179

Ich verwende den folgenden Code zum Dekodieren einer Base64-Zeichenkette in der Node.js-API, Node.js Version 10.7.0:

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. Es wird nicht funktionieren. Fügen Sie den Code in die serverseitigen Dateien von Node.js ein. Ich verwende die obige Codezeile in der API-Entwicklung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X