Как выполнить кодирование Base64 в Node.js?
Вопрос: В 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 ответ(ов)
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.
Попробуйте сделать так:
console.log(Buffer.from("Hello World").toString('base64'));
console.log(Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii'));
Этот код сначала преобразует строку в строку, закодированную в base64, то есть SGVsbG8gV29ybGQ=
, а затем вы можете декодировать её обратно в Hello World
.
Чтобы декодировать строку в формате 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 + '"');
Этот вариант более современный и рекомендуется к использованию в новых проектах.
Как закодировать/декодировать строку в Base64 на JavaScript?
Когда следует использовать escape вместо encodeURI / encodeURIComponent?
Как предотвратить установку "devDependencies" модулей NPM для Node.js (package.json)?
Как исправить ошибку "ReferenceError: primordials is not defined" в Node.js
Как протестировать один файл с помощью Jest?