12

Как выполнить кодирование Base64 в Node.js?

11

Вопрос: В Node.js уже есть встроенное кодирование в Base64?

Я хочу узнать, поддерживает ли Node.js встроенное кодирование в Base64. Причина, по которой я задаю этот вопрос, заключается в том, что метод final() из модуля crypto может выводить только шестнадцатеричные, двоичные или ASCII данные. Например, я использую следующий код:

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

Согласно документации, метод update() может выводить данные в формате Base64, однако final() не поддерживает Base64. Я пробовал это сделать, и это приводит к ошибке.

Вот пример, который я пробовал:

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

При этом возникает вопрос: что мне использовать для дешифрования? Шестнадцатеричный (hex) или Base64?

В связи с этим, мне нужна функция, которая сможет закодировать мой зашифрованный вывод в формат Base64. Что вы можете посоветовать?

3 ответ(ов)

0

Buffers можно использовать для кодирования строки или фрагмента данных в формат Base64. Вот пример того, как это сделать:

Вы можете установить Buffer через npm следующим образом: npm i buffer --save

Используйте его в вашем js файле следующим образом:

var buffer = require('buffer/').Buffer;

->> console.log(buffer.from("Hello Vishal Thakur").toString('base64'));
SGVsbG8gVmlzaGFsIFRoYWt1cg==  // Результат

->> console.log(buffer.from("SGVsbG8gVmlzaGFsIFRoYWt1cg==", 'base64').toString('ascii'))
Hello Vishal Thakur   // Результат

Таким образом, вы можете легко кодировать и декодировать строки в формат Base64 с помощью модуля Buffer.

0

Попробуйте сделать так:

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

Этот код сначала преобразует строку в строку, закодированную в base64, то есть SGVsbG8gV29ybGQ=, а затем вы можете декодировать её обратно в Hello World.

0

Чтобы декодировать строку в формате Base64 в API Node.js версии 10.7.0, вы можете использовать следующий код:

let data = 'c3RhY2thYnVzZS5jb20=';  // Строка в формате Base64
let buff = new Buffer(data, 'base64');  // Создание буфера
let text = buff.toString('ascii');  // Преобразование буфера в строку в кодировке ASCII
console.log('"' + data + '" преобразована из Base64 в ASCII в виде "' + text + '"');

Обратите внимание, что данный код предназначен для выполнения на стороне сервера в Node.js. Если вы попытаетесь запустить его в консоли браузера, он не сработает. Этот код можно использовать в разработке API.

Также стоит отметить, что начиная с версии Node.js 6, использование метода Buffer() с использованием конструктора устарело. Вместо этого рекомендуется использовать Buffer.from():

let data = 'c3RhY2thYnVzZS5jb20=';  // Строка в формате Base64
let buff = Buffer.from(data, 'base64');  // Создание буфера
let text = buff.toString('ascii');  // Преобразование буфера в строку в кодировке ASCII
console.log('"' + data + '" преобразована из Base64 в ASCII в виде "' + text + '"');

Этот вариант более современный и рекомендуется к использованию в новых проектах.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь