Cómo hacer la codificación Base64 en node.js?

¿ Node.js se han incorporado en la codificación base64 todavía?

La razón por la que pregunto esto, es que final() de crypto sólo pueden salida hexadecimal, binario 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 a la documentación, update() puede dar salida a los datos codificados en base64. Sin embargo, final() no admite base64. He intentado y se va a romper.

Si hago esto:

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

Entonces, ¿qué debo usar para el descifrado? Hex o base64?

Por lo tanto, estoy buscando una función de a en base64 codificar mi cifrados hex de salida.

Gracias.

  • Para alguien que busca este problema en/después del 2016 cipher.final('base64') obras
InformationsquelleAutor murvinlai | 2011-05-31

4 Kommentare

  1. 1789

    Los búferes pueden ser utilizados para la toma de una cadena o un conjunto de datos y hacer 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

    Amortiguadores son un objeto global, por lo que no requieren que se necesita. Los búferes creado con cadenas puede tomar un parámetro de codificación opcional para especificar lo que la codificación de la cadena es en. La disposición toString y Buffer constructor codificaciones son como sigue:

    ‘ascii’ – de 7 bits ASCII sólo de datos. Este método de codificación es muy
    rápido, y se tira el bit más alto si se establece.

    ‘utf8’ Multi – byte codificado
    Los caracteres Unicode. Muchas páginas web y otros formatos de documento de uso
    UTF-8.

    ‘ucs2’ – 2-bytes, little endian codifica caracteres Unicode. Es
    puede codificar sólo BMP(Plano Multilingüe Básico, U+0000 – U+FFFF).

    ‘base64’ – cadena Base64 de la codificación.

    ‘binario’ – Una forma de codificación de raw
    los datos binarios en cadenas utilizando sólo los primeros 8 bits de cada
    carácter. Este método de codificación está en desuso y debe evitarse en
    favor de Búfer de objetos donde sea posible. Esta codificación será eliminado
    en futuras versiones de Nodo.

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

    La aceptada respuesta contiene lo que se considera un problema de seguridad en el nodo versiones mayores de 6 (aunque parece probable que para este caso de uso que la entrada siempre se puede obligar a una cadena).

    La Buffer constructor está en desuso de acuerdo a la documentación.

    Aquí es un ejemplo de una vulnerabilidad que puede ser el resultado de su uso en el ws de la biblioteca.

    Los fragmentos de código debe leer:

    console.log(Buffer.from("Hello World").toString('base64'));
    console.log(Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii'));
    • Cuando trato de usar la primera línea, el Nodo devuelve: [TypeError: este no es un tipo de matriz.]
    • Este error se produce en el nodo versiones anteriores a la versión v6. En estas versiones tendrás que utilizar el constructor (new Buffer) en lugar de Buffer.from.
    • Búfer.a partir de() fue añadido en la v4.5.0.
    • Sólo para ahorrar unos minutos que he perdido tratando de ver la diferencia entre este ejemplo y el que la aceptó respuesta, la aceptó responder ahora se actualiza a lo que esta respuesta sugiere.
  3. 40

    crypto ahora soporta base64 (referencia):

    cipher.final('base64') 

    Así que usted podría simplemente 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');
    • Ninguna razón para usar este sobre NotJavanese la respuesta?
    • Tenían que coincidir con los cifrados entre el Nodo y Python, y esta respuesta me salvó una pregunta! Gracias 🙂
  4. 0

    Yo estoy usando el siguiente código para decodificar la cadena base64 en el nodo de la API de nodejs versión 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 + '"'); 

    Por favor, no intente ejecutar el código anterior en la consola del navegador, no funciona. Poner el código en el lado del servidor de archivos de nodejs. Estoy usando por encima de la línea de código de la API de desarrollo.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea