Come fare codifica Base64 in node.js?

Node.js ha ancora la codifica base64 integrata?

Il motivo per cui lo chiedo è che final() di crypto può solo emettere dati esadecimali, binari o ascii. Per esempio:

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

Secondo i documenti, update() può emettere dati codificati in base64. Tuttavia, final() non supporta base64. Ho provato e si romperà.

Se faccio questo:

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

Allora cosa dovrei usare per la decodifica? Esadecimale o base64?

Pertanto, sto cercando una funzione per codificare in base64 il mio output esadecimale crittografato.

Grazie.

I buffer possono essere utilizzati per prendere una stringa o un pezzo di dati e fare la codifica base64 del risultato. Per esempio:

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

I buffer sono un object globale, quindi non è necessario alcun bisogno. I buffer creati con le stringhe possono utilizzare un parametro di codifica facoltativo per specificare la codifica della stringa. Le codifiche disponibili per la costruzione di stringhe toString e Buffer sono le seguenti:

‘ascii’ – solo per dati ASCII a 7 bit. Questo metodo di codifica è molto veloce e rimuoverà il bit più alto se impostato.

‘utf8’ – Caratteri Unicode codificati multi byte. Molte pagine Web e altri formati di documenti utilizzano UTF-8.

‘ucs2’ – 2 byte, caratteri Unicode con codifica little endian. Può codificare solo BMP (Basic Plilingual Plane, U + 0000 – U + FFFF).

‘base64’ – Codifica stringa Base64.

‘binario’ – Un modo per codificare dati binari grezzi in stringhe usando solo i primi 8 bit di ciascun carattere. Questo metodo di codifica è deprecato e dovrebbe essere evitato a favore degli oggetti Buffer laddove ansible. Questa codifica verrà rimossa nelle future versioni di Node.

La risposta accettata contiene ciò che è considerato un problema di sicurezza nelle versioni del nodo superiori a 6 (anche se sembra probabile per questo caso che l’input possa sempre essere forzato ad una stringa).

Il costruttore del Buffer è deprecato in base alla documentazione .

Ecco un esempio di una vulnerabilità che può derivare dall’utilizzo nella libreria ws.

I frammenti di codice dovrebbero contenere:

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

crypto ora supporta base64 ( riferimento ):

 cipher.final('base64') 

Quindi potresti semplicemente fare:

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