Czy node.js ma już wbudowane kodowanie base64?
Powodem dlaczego pytam jest to, że final()
z crypto
danych CAN tylko wyjście hex, 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 wyprowadzać dane zakodowane w base64. Jednak final()
nie obsługuje base64. Próbowałem i to się zepsuje.
Jeśli to zrobię:
var ciph = cipher.update(plaintext, 'utf8', 'base64');
ciph += cipher.final('hex');
Więc czego powinienem użyć do odszyfrowania? Hex czy base64?
Dlatego szukam funkcji do kodowania base64 mojego zaszyfrowanego wyjścia szesnastkowego.
cipher.final('base64')
działaOdpowiedzi:
Buforów można użyć do pobrania ciągu danych lub fragmentu danych i wykonania kodowania base64 wyniku. Na przykład:
Bufory są obiektem globalnym, więc nie jest wymagane żadne wymaganie. Bufory utworzone za pomocą strun może opcjonalny parametr kodowania, aby określić co kodującego łańcuch jest w dostępnym.
toString
IBuffer
konstruktor kodowania są następujące:źródło
const atob = (data) => Buffer.from(data, 'base64').toString('ascii');
.toString("binary")
(watob
końcu oznacza ascii (base64) na binarny)Akceptowana odpowiedź poprzednio zawierała
new Buffer()
, co jest uważane za problem bezpieczeństwa w wersjach węzłów większych niż 6 (choć wydaje się prawdopodobne, że dla tego przypadku użycia dane wejściowe zawsze można przekonwertować na ciąg znaków).Buffer
Konstruktor jest przestarzała zgodnie z dokumentacją .Oto przykład luki, która może wynikać z użycia jej w bibliotece ws.
Fragmenty kodu powinny brzmieć:
Po napisaniu tej odpowiedzi została zaktualizowana i teraz pasuje do tego.
źródło
new Buffer
) zamiastBuffer.from
.crypto obsługuje teraz base64 ( referencje ):
Więc możesz po prostu zrobić:
źródło
Bufory można użyć do pobrania ciągu danych lub fragmentu danych i wykonania kodowania base64 wyniku. Na przykład:
Możesz zainstalować bufor za pomocą npm:
npm i buffer --save
możesz użyć tego w swoim
js
pliku w następujący sposób: -źródło
Używam następującego kodu do dekodowania ciągu base64 w węźle API nodejs w wersji 10.7.0
Nie próbuj uruchamiać powyżej kodu w konsoli przeglądarki, nie będzie działać. Umieść kod w plikach po stronie serwera nodejs. Używam powyższego kodu linii do programowania API.
źródło
Stworzyłem ostateczne małe js npm bibliotekę dla konwersji kodowania / dekodowania base64 w Node.js.
Instalacja
Stosowanie
źródło