Есть ли в node.js встроенная кодировка base64?
Причина, по которой я спрашиваю это, заключается в том, что final()
from 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 моего зашифрованного шестнадцатеричного вывода.
cipher.final('base64')
работ 2016 годаОтветы:
Буферы могут использоваться для получения строки или фрагмента данных и выполнения кодирования base64 результата. Например:
Буферы являются глобальным объектом, поэтому в них нет необходимости. Буферы , созданные с помощью строк может принимать необязательный параметр кодирования , чтобы указать , что кодирующая последовательность находится в доступных.
toString
ИBuffer
конструктор кодироаки следующим образом :источник
const atob = (data) => Buffer.from(data, 'base64').toString('ascii');
.toString("binary")
(atob
расшифровывается как ascii (base64) в двоичный файл, в конце концов)Принятый ранее ответ содержал
new Buffer()
, что считается проблемой безопасности в версиях узла больше 6 (хотя для этого варианта использования кажется вероятным, что ввод всегда может быть приведен к строке).Buffer
Конструктор осуждается в соответствии с документацией .Вот пример уязвимости, которая может возникнуть в результате использования ее в библиотеке ws.
Фрагменты кода должны читать:
После того, как этот ответ был написан, он был обновлен и теперь соответствует этому.
источник
new Buffer
), а неBuffer.from
.crypto теперь поддерживает base64 ( ссылка ):
Так что вы можете просто сделать:
источник
Буферы могут использоваться для получения строки или фрагмента данных и выполнения кодирования base64 результата. Например:
Вы можете установить Buffer через npm, например:
npm i buffer --save
Вы можете использовать это в своем
js
файле, как это: -источник
Я использую следующий код для декодирования строки base64 в API узла nodejs версии 10.7.0
Пожалуйста, не пытайтесь запустить приведенный выше код в консоли браузера, не будет работать. Поместите код в серверные файлы nodejs. Я использую вышеуказанный строчный код в разработке API.
источник
Я создал очень маленький JS NPM библиотеку для преобразования кодирования / декодирования base64 в Node.js.
Установка
Применение
источник
Вы можете сделать base64 кодирование и декодирование с помощью простого JavaScript.
Это реализовано в этом декодере кодера Base64
источник