¿Cómo puedo codificar Base64 en Node.js?

Resuelto murvinlai asked hace 13 años • 8 respuestas

¿Node.js ya tiene codificación Base64 incorporada?

La razón por la que pregunto esto es que final()from cryptosolo puede generar datos hexadecimales, binarios o ASCII. Por ejemplo:

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

Según la documentación, update()puede generar datos codificados en Base64. Sin embargo, final()no es compatible con Base64. Lo intenté y se romperá.

Si hago esto:

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

Entonces, ¿qué debo usar para descifrar? ¿Hexadecimal o Base64?

Por lo tanto, estoy buscando una función para codificar en Base64 mi salida hexadecimal cifrada.

murvinlai avatar May 31 '11 09:05 murvinlai
Aceptado

Los buffers se pueden usar para tomar una cadena o un dato y realizar la codificación Base64 del resultado. Por ejemplo:

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

El Bufferconstructor es un objeto global, por lo que no se necesita ningún requisito. Los buffers creados con cadenas pueden tomar un parámetro de codificación opcional para especificar en qué codificación se encuentra la cadena. Las codificaciones disponibles toStringy Bufferde constructor son las siguientes:

'ascii': solo para datos ASCII de 7 bits. Este método de codificación es muy rápido y eliminará el bit alto si está configurado.

'utf8': caracteres Unicode codificados de varios bytes. Muchas páginas web y otros formatos de documentos utilizan UTF-8.

'ucs2': caracteres Unicode codificados en little endian de 2 bytes. Solo puede codificar BMP (Plano multilingüe básico, U+0000 - U+FFFF).

'base64': codificación de cadena Base64.

'binario': una forma de codificar datos binarios sin procesar en cadenas utilizando solo los primeros 8 bits de cada carácter. Este método de codificación está en desuso y debe evitarse en favor de los objetos Buffer siempre que sea posible. Esta codificación se eliminará en futuras versiones de Node.

onteria_ avatar May 31 '2011 02:05 onteria_

La respuesta aceptada anteriormente contenía new Buffer() , lo que se considera un problema de seguridad en las versiones de Node.js superiores a 6 (aunque parece probable que para este caso de uso la entrada siempre se pueda convertir en una cadena).

El Bufferconstructor está en desuso según la documentación .

Los fragmentos de código deberían decir:

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

Después de escribir esta respuesta, se actualizó y ahora coincide con esto.

NotJavanese avatar Jul 07 '2016 04:07 NotJavanese

cryptoahora es compatible con Base64 ( referencia ):

cipher.final('base64')

Entonces simplemente podrías hacer:

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');
Javier Ferrero avatar Apr 24 '2015 20:04 Javier Ferrero

Los buffers se pueden usar para tomar una cadena o un dato y realizar la codificación Base64 del resultado. Por ejemplo:

Puedes instalar Buffer a través de npm como:npm i buffer --save

Puedes usar esto en tu jsarchivo de esta manera:

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
Vishal Thakur avatar Feb 12 '2020 13:02 Vishal Thakur