nodejs - ¿Cómo hacer la codificación Base64 en node.js?
node base64 decode to string (3)
¿Tiene node.js ya incorporado la codificación base64?
La razón por la que pregunto esto es que final()
de crypto
solo 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'');
De acuerdo con los documentos, update()
puede generar datos codificados en base64. Sin embargo, final()
no soporta 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? Hexagonal o base64?
Por lo tanto, estoy buscando una función para codificar en base64 mi salida hexadecimal cifrada.
Gracias.
La respuesta aceptada contiene lo que se considera un problema de seguridad en las versiones de nodo superiores a 6 (aunque es probable que para este caso de uso la entrada siempre se pueda coaccionar a una cadena).
El constructor Buffer
está en desuso de acuerdo con la documentation .
Here es un ejemplo de una vulnerabilidad que puede resultar de su uso en la biblioteca ws.
Los fragmentos de código deben leer:
console.log(Buffer.from("Hello World").toString(''base64''));
console.log(Buffer.from("SGVsbG8gV29ybGQ=", ''base64'').toString(''ascii''));
crypto ahora soporta base64 ( reference ):
cipher.final(''base64'')
Así que 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'');
Buffers se pueden usar para tomar una cadena o parte de datos y hacer una 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
Los amortiguadores son un objeto global, por lo que no se necesita ningún requerimiento. 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 de constructor disponibles para toString
y Buffer
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 se establece.
''utf8'' - Caracteres Unicode codificados de múltiples 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 formato 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 objetos Buffer cuando sea posible. Esta codificación se eliminará en futuras versiones de Node.