Как сделать кодировку Base64 в узле.Джей?
делает узел.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 ответов:
буфера может использоваться для взятия строки или фрагмента данных и выполнения кодировки 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' - многобайтовое кодирование символ Юникода. Многие веб-страницы и другие форматы документов UTF-8.
'ucs2' - 2 байта, маленькие конечные кодированные символы Юникода. Оно может кодировать только BMP (Basic Multilingual Plane, U+0000 - U+FFFF).
'base64' - кодировка строки Base64.
'binary' - способ кодирования raw двоичные данные в строку, используя только первые 8 бит каждый характер. Этот метод кодирования является устаревшим, и его следует избегать в предпочтение объектов буфера, где это возможно. Эта кодировка будет удалена в будущих версиях узла.
принятый ответ содержит то, что считается проблемой безопасности в версиях узлов больше 6 (хотя для этого usecase кажется вероятным, что ввод всегда может быть принудительно приведен к строке).
The
Bufferконструктор устарел в соответствии с документация.здесь является примером уязвимости,которая может возникнуть в результате ее использования в библиотеке ws.
фрагменты кода следует читать:
console.log(Buffer.from("Hello World").toString('base64')); console.log(Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii'));
crypto теперь поддерживает base64 (ссылка):
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');
Comments