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