Jak zrobić kodowanie Base64 w węźle.js?
Robi węzeł.js ma już wbudowane kodowanie base64?
Powodem, dla którego pytam, jest to, że final()
z crypto
mogą wysyłać tylko dane szesnastkowe, binarne lub ascii. Na przykład:
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');
Zgodnie z dokumentami, update()
może wysyłać dane zakodowane w base64. Jednak final()
nie obsługuje base64. Próbowałem i się złamie.
Jeśli to zrobię:
var ciph = cipher.update(plaintext, 'utf8', 'base64');
ciph += cipher.final('hex');
Więc czego powinienem użyć do deszyfrowania? Hex czy base64?
Dlatego szukam funkcji do base64 - encode my encoded wyjście sześciokątne.
Dzięki.3 answers
Bufory mogą być używane do pobierania ciągu lub fragmentu danych i wykonywania kodowania wyniku base64. Na przykład:
> console.log(Buffer.from("Hello World").toString('base64'));
SGVsbG8gV29ybGQ=
> console.log(Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii'))
Hello World
Bufory są obiektami globalnymi, więc nie są potrzebne żadne wymagania. Bufory utworzone za pomocą łańcuchów mogą przyjmować opcjonalny parametr kodowania, aby określić kodowanie łańcucha. Dostępne kodowania konstruktorów toString
i Buffer
są następujące:
'ascii' - tylko dla 7 bitowych danych ASCII. Ta metoda kodowania jest bardzo szybko i pozbędzie się wysokiej bit jeśli ustawiony.
'utf8' - kodowanie wielu bajtów Znaki Unicode. Wiele stron internetowych i innych formatów dokumentów używa UTF-8.
'ucs2' - 2-bajtowe, małe endian zakodowane znaki Unicode. Informatyka może kodować tylko BMP (Podstawowa płaszczyzna Wielojęzyczna, U+0000 - u+FFFF).
'base64' - kodowanie ciągu Base64.
'binary' - sposób kodowania raw dane binarne do ciągów za pomocą tylko pierwszych 8 bitów każdego charakter. Ta metoda kodowania jest przestarzała i powinna unikać w faworyzowanie obiektów bufora w miarę możliwości. To kodowanie zostanie usunięte w przyszłych wersjach Node.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-05 20:42:12
Zaakceptowana odpowiedź Zawiera to, co jest uważane za problem bezpieczeństwa w wersjach węzłów większych niż 6 (chociaż wydaje się prawdopodobne, że w tej sytuacji Wejście Może być zawsze wymuszone na łańcuchu znaków).
Konstruktor Buffer
jest przestarzały zgodnie z dokumentacją .
Tutaj znajduje się przykład luki, która może wynikać z użycia jej w bibliotece ws.
Urywki kodu powinny brzmieć:
console.log(Buffer.from("Hello World").toString('base64'));
console.log(Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii'));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-19 19:34:38
Crypto obsługuje teraz Base64 (reference):
cipher.final('base64')
Więc można po prostu zrobić:
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');
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-03 08:59:38