Existem métodos em JavaScript que podem ser usados para codificar e decodificar uma string usando a codificação base64?
javascript
base64
Mo.
fonte
fonte
Respostas:
Alguns navegadores como Firefox, Chrome, Safari, Opera e IE10 + podem lidar com o Base64 nativamente. Dê uma olhada nesta pergunta do Stackoverflow . Está usando
btoa()
eatob()
funções .Para JavaScript do lado do servidor (Nó), você pode usar
Buffer
s para decodificar.Se você está procurando uma solução entre navegadores, existem bibliotecas existentes como o CryptoJS ou código como:
http://ntt.cc/2008/01/19/base64-encoder-decoder-with-javascript.html
Com o último, você precisa testar minuciosamente a função para compatibilidade entre navegadores. E o erro já foi relatado .
fonte
new Buffer('Hello, world!').toString('base64');
new Buffer('SGVsbG8sIHdvcmxkIQ==', 'base64').toString('ascii');
(fonte)new Buffer(string)
está obsoleto.Buffer.from(jwt.split('.')[1], 'base64').toString()
Nos navegadores baseados no Gecko / WebKit (Firefox, Chrome e Safari) e no Opera, você pode usar btoa () e atob () .
Resposta original: Como você pode codificar uma string para Base64 em JavaScript?
fonte
Internet Explorer 10 ou superior
Navegador Cruzado
Bibliotecas / módulos de codificação e decodificação UTF-8 e Base64 Javascript reescritos e modularizados para AMD, CommonJS, Nodejs e navegadores. Compatível com vários navegadores.
com Node.js
Aqui está como você codifica o texto normal para base64 no Node.js:
E aqui está como você decodifica cadeias codificadas em base64:
com Dojo.js
Para codificar uma matriz de bytes usando dojox.encoding.base64:
Para decodificar uma sequência codificada em base64:
bower install angular-base64
Mas como?
Se você quiser saber mais sobre como a base64 é codificada em geral e em JavaScript em particular, eu recomendaria este artigo: Ciência da computação em JavaScript: codificação Base64
fonte
c2
e provávelc1
ec3
por isso não irá trabalhar com"use strict"
como definido acima.Aqui está uma versão mais rigorosa do post de Sniper. Ele pressupõe uma string base64 bem formada, sem retornos de carro. Esta versão elimina alguns loops, adiciona a
&0xff
correção de Yaroslav, elimina valores nulos à direita, além de um pouco de código de golfe.fonte
decodeBase64=function(f){var g={},b=65,d=0,a,c=0,h,e="",k=String.fromCharCode,l=f.length;for(a="";91>b;)a+=k(b++);a+=a.toLowerCase()+"0123456789+/";for(b=0;64>b;b++)g[a.charAt(b)]=b;for(a=0;a<l;a++)for(b=g[f.charAt(a)],d=(d<<6)+b,c+=6;8<=c;)((h=d>>>(c-=8)&255)||a<l-2)&&(e+=k(h));return e};
var g={},k=String.fromCharCode,i;for(i=0;i<64;)g[k(i>61?(i&1)*4|43:i+[65,71,-4][i/26&3])]=i++;
Função de decodificação de JavaScript Base64 curta e rápida, sem falhas:
fonte
https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_.22Unicode_Problem.22
fonte
O projeto php.js possui implementações em JavaScript de muitas das funções do PHP.
base64_encode
ebase64_decode
estão incluídos.fonte
Alguém disse código de golfe? =)
A seguir, é minha tentativa de melhorar minha desvantagem enquanto acompanho os horários. Fornecido para sua conveniência.
Na verdade, o que eu procurava era uma implementação assíncrona e, para minha surpresa, ao
forEach
contrário da$([]).each
implementação do método JQuery, é muito síncrona.Se você também tiver em mente essas noções malucas, um atraso 0
window.setTimeout
executará a decodificação da base64 de forma assíncrona e executará a função de retorno de chamada com o resultado quando terminar.A @ Toothbrush sugeriu "indexar uma string como uma matriz" e se livrar do
split
. Essa rotina parece realmente estranha e não tem certeza de quão compatível será, mas atinge outro passarinho, então vamos lá.Ao tentar encontrar mais informações sobre a string JavaScript como array, eu tropecei nesta dica profissional usando um
/./g
regex para percorrer uma string. Isso reduz ainda mais o tamanho do código, substituindo a string no lugar e eliminando a necessidade de manter uma variável de retorno.Se, no entanto, você estava procurando algo um pouco mais tradicional, talvez o seguinte seja mais para o seu gosto.
Como não havia o problema nulo à direita, ele foi removido para permanecer abaixo do padrão, mas deve ser facilmente resolvido com um
trim()
ou umtrimRight()
se você preferir, caso isso represente um problema para você.ie
Nota:
O resultado é uma sequência de bytes ascii, se você precisar de unicode, o mais fácil é a
escape
sequência de bytes que pode ser decodificadadecodeURIComponent
para produzir a sequência de caracteres unicode.Como
escape
está sendo descontinuado, podemos alterar nossa função para oferecer suporte a unicode diretamente sem a necessidadeescape
ouString.fromCharCode
podemos produzir uma%
string de escape pronta para decodificação de URI.nJoy!
fonte
split
da string, pois pode indexar uma string JavaScript como uma matriz.s.split('').forEach(function ...
pode ser substituído por[].forEach.call(s, function ...
. Deve ser muito mais rápido, porque não é necessário dividir a string.Eu tentei as rotinas Javascript em phpjs.org e elas funcionaram bem.
Tentei pela primeira vez as rotinas sugeridas na resposta escolhida por Ranhiru Cooray - http://ntt.cc/2008/01/19/base64-encoder-decoder-with-javascript.html
Eu descobri que eles não funcionavam em todas as circunstâncias. Eu escrevi um caso de teste em que essas rotinas falham e as postei no GitHub em:
https://github.com/scottcarter/base64_javascript_test_data.git
Também publiquei um comentário no blog no ntt.cc para alertar o autor (aguardando moderação - o artigo é antigo, portanto não tenho certeza se o comentário será publicado).
fonte
Prefiro usar os métodos de codificação / decodificação bas64 do CryptoJS , a biblioteca mais popular para algoritmos criptográficos padrão e seguros implementados em JavaScript usando as melhores práticas e padrões.
fonte
No Node.js, podemos fazê-lo de maneira simples
fonte
Para estruturas JavaScripts em que não há
atob
método e, caso você não queira importar bibliotecas externas, esta é uma função curta.Ele obteria uma string que contém o valor codificado em Base64 e retornará uma matriz decodificada de bytes (onde a matriz de bytes é representada como matriz de números em que cada número é um número inteiro entre 0 e 255, inclusive).
Recursos utilizados: RFC-4648 Seção 4
fonte