Question Comment faire pour encoder Base64 dans node.js?


Est-ce que node.js a déjà intégré l'encodage base64?

La raison pour laquelle je demande ceci est que final() de crypto ne peut sortir que des données hexadécimales, binaires ou ascii. Par exemple:

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');

Selon les docs, update() peut produire des données codées en base64. cependant, final() ne supporte pas base64. J'ai essayé et ça va casser.

Si je fais ceci:

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

Alors que dois-je utiliser pour le décryptage? Hex ou base64?

Par conséquent, je suis à la recherche d'une fonction à base64-encoder ma sortie hex chiffrée.

Merci.


590
2018-05-31 02:09


origine


Réponses:


Tampons peut être utilisé pour prendre une chaîne ou un morceau de données et faire l'encodage base64 du résultat. Par exemple:

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

Les tampons sont un objet global, donc aucune exigence n'est requise. Les tampons créés avec des chaînes peuvent prendre un paramètre de codage facultatif pour spécifier le codage de la chaîne. toString et Buffer Les codages constructeurs sont les suivants:

'ascii' - pour les données ASCII 7 bits uniquement. Cette méthode de codage est très   rapide, et dépouillera le bit haut s'il est défini.

'utf8' - Multi-octets codés   Caractères Unicode. De nombreuses pages Web et d'autres formats de documents utilisent   UTF-8.

'ucs2' - 2 octets, caractères Unicode codés en little endian. Il   ne peut coder que BMP (Plan multilingue de base, U + 0000 - U + FFFF).

'base64' - Encodage de chaîne Base64.

'binaire' - Une façon d'encoder brut   données binaires en chaînes en utilisant uniquement les 8 premiers bits de chaque   personnage. Cette méthode de codage est déconseillée et doit être évitée   faveur des objets Buffer lorsque cela est possible. Cet encodage sera supprimé   dans les futures versions de Node.


1458
2018-05-31 02:46



La réponse acceptée contient ce qui est considéré comme un problème de sécurité dans les versions de nœuds supérieures à 6 (bien qu'il semble probable pour cette utilisation que l'entrée peut toujours être contrainte dans une chaîne).

le Buffer constructeur est dépréciée en fonction de la Documentation.

Ici est un exemple d'une vulnérabilité qui peut résulter de son utilisation dans la bibliothèque ws.

Les extraits de code doivent indiquer:

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

145
2017-07-07 04:37



crypto supporte maintenant base64 (référence):

cipher.final('base64') 

Donc vous pouvez simplement faire:

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');

27
2018-04-24 20:17