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



спасибо.

613   3  

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

    Ничего не найдено.