Как сделать кодировку Base64 в node.js?

Есть ли у 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-кодирования моего зашифрованного шестнадцатеричного вывода.

Благодарю.

Буферы могут использоваться для взятия строки или части данных и выполнения кодировки base64 результата. Например:

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

Буферы – это глобальный объект, поэтому никаких требований не требуется. Буферы, созданные со строками, могут использовать необязательный параметр кодирования, чтобы указать, какая кодировка содержит строку. Доступные кодировки конструктора toString и Buffer следующие:

‘ascii’ – только для 7-битных ASCII-данных. Этот метод кодирования очень быстрый, и если он установлен, он будет разделять верхний бит.

‘utf8’ – многобайтовые кодированные символы Unicode. Многие веб-страницы и другие форматы документов используют UTF-8.

‘ucs2’ – 2-байтовые символы с кодировкой Unicode с минимальным кодированием. Он может кодировать только BMP (Basic Multilingual Plane, U + 0000 – U + FFFF).

‘base64’ – кодировка строки Base64.

‘binary’ – способ кодирования необработанных двоичных данных в строки с использованием только первых 8 бит каждого символа. Этот метод кодирования устарел и его следует избегать, если это возможно, в пользу объектов буфера. Эта кодировка будет удалена в будущих версиях узла.

В принятом ответе содержится то, что считается проблемой безопасности в версиях узлов более 6 (хотя для этой usecase кажется вероятным, что вход всегда может быть привязан к строке).

Конструктор Buffer устарел в соответствии с документацией .

Вот пример уязвимости, которая может возникнуть в результате использования ее в ws-библиотеке.

Фрагменты кода должны читать:

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

crypto теперь поддерживает base64 ( reference ):

 cipher.final('base64') 

Таким образом, вы можете просто сделать:

 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'); 
  • Ошибка кодирования с помощью HttpWebResponse
  • Преобразование байтов и символов в Java
  • В OS X Lion LANG не настроен на UTF-8, как его исправить?
  • Проблема с кодировкой Java FileReader
  • Как найти кодировку по умолчанию или кодировку в Java?
  • Почему для кодировки base64 требуется заполнить, если входная длина не делится на 3?
  • Ресурс url, который является точкой (% 2E)
  • C # Справка по чтению иностранных символов с помощью StreamReader
  • Как получить значение ASCII строки в C #
  • Использование PowerShell для записи файла в UTF-8 без спецификации
  • В чем разница между кодировками utf8mb4 и utf8 в mysql?
  • Interesting Posts

    Извлечение данных между двумя символами в Excel

    Обнаружение столкновений огромного количества кругов

    Является ли стандарт C ++ низкой эффективностью для iostreams, или я просто имею дело с плохой реализацией?

    Как нарисовать изображение над другим изображением?

    Программно предотвратить запуск заставки Windows

    jQuery – заменить все экземпляры символа в строке

    Установите тайм-аут на операцию

    Создание диаграммы ГАНТ (временная шкала) от времени начала и продолжительности

    Имена файлов в ручном накопителе превратились в текст тарабарщины

    Повторное исключение: почему метод компилируется без предложения бросков?

    Как вы находите сумму всех чисел в массиве в Java?

    Распространение с помощью data.frame / tibble с повторяющимися идентификаторами

    Использование даты и времени в пакетном файле для создания имени файла

    Ярлык клавиатуры для выбора адресной строки в Total Commander

    Менее сложный интерфейс для SQL Server

    Давайте будем гением компьютера.