¿Hay algún método en JavaScript que pueda usarse para codificar y decodificar una cadena usando codificación base64?
javascript
base64
Mes.
fuente
fuente
Respuestas:
Algunos navegadores como Firefox, Chrome, Safari, Opera e IE10 + pueden manejar Base64 de forma nativa. Echa un vistazo a esta pregunta de Stackoverflow . Está usando
btoa()
yatob()
funciones .Para JavaScript del lado del servidor (Nodo), puede usar
Buffer
s para decodificar.Si está buscando una solución de navegador cruzado, hay bibliotecas existentes como CryptoJS o código como:
http://ntt.cc/2008/01/19/base64-encoder-decoder-with-javascript.html
Con este último, debe probar a fondo la función para la compatibilidad entre navegadores. Y el error ya ha sido reportado .
fuente
new Buffer('Hello, world!').toString('base64');
new Buffer('SGVsbG8sIHdvcmxkIQ==', 'base64').toString('ascii');
(fuente)new Buffer(string)
está en desuso.Buffer.from(jwt.split('.')[1], 'base64').toString()
En los navegadores basados en Gecko / WebKit (Firefox, Chrome y Safari) y Opera, puede usar btoa () y atob () .
Respuesta original: ¿Cómo puede codificar una cadena a Base64 en JavaScript?
fuente
Internet Explorer 10+
Navegador cruzado
Bibliotecas / módulos de codificación y decodificación Javascript UTF-8 y Base64 reescritas y modularizadas para AMD, CommonJS, Nodejs y navegadores. Compatible con navegador cruzado.
con Node.js
Así es como codifica el texto normal a base64 en Node.js:
Y así es como decodifica cadenas codificadas en base64:
con Dojo.js
Para codificar una matriz de bytes usando dojox.encoding.base64:
Para decodificar una cadena codificada en base64:
bower instalar angular-base64
¿Pero cómo?
Si desea obtener más información sobre cómo se codifica base64 en general, y en JavaScript en particular, le recomendaría este artículo: Informática en JavaScript: codificación Base64
fuente
c2
y es probablec1
yc3
lo que no funciona con"use strict"
los definidos anteriormente.Aquí hay una versión más estricta de la publicación de Sniper. Presume una cadena base64 bien formada sin retornos de carro. Esta versión elimina un par de bucles, agrega la
&0xff
solución de Yaroslav, elimina los nulos finales, además de un poco de código de golf.fuente
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++;
Función de decodificación de JavaScript Base64 corta y rápida sin seguridad:
fuente
https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_.22Unicode_Problem.22
fuente
El proyecto php.js tiene implementaciones de JavaScript de muchas de las funciones de PHP.
base64_encode
ybase64_decode
están incluidosfuente
¿Alguien dijo código golf? =)
El siguiente es mi intento de mejorar mi discapacidad mientras me pongo al día. Suministrado para su conveniencia.
Lo que realmente buscaba era una implementación asincrónica y, para mi sorpresa, resulta
forEach
que la$([]).each
implementación del método de JQuery es muy sincrónica.Si también tenía en mente esas ideas locas, un retraso de 0
window.setTimeout
ejecutará la decodificación base64 de forma asincrónica y ejecutará la función de devolución de llamada con el resultado cuando haya terminado.@Toothbrush sugirió "indexar una cadena como una matriz" y deshacerse de
split
. Esta rutina parece realmente extraña y no estoy seguro de cuán compatible será, pero golpea a otro pajarito, así que vamos a tenerla.Mientras intentaba encontrar más información sobre la cadena de JavaScript como matriz, me topé con este consejo profesional usando una
/./g
expresión regular para recorrer una cadena. Esto reduce aún más el tamaño del código al reemplazar la cadena en su lugar y eliminar la necesidad de mantener una variable de retorno.Sin embargo, si estaba buscando algo un poco más tradicional, quizás lo siguiente sea más de su agrado.
No tenía el problema nulo final, por lo que se eliminó para permanecer bajo par, pero debería resolverse fácilmente con un
trim()
o untrimRight()
si lo prefiere, si esto le plantea un problema.es decir.
Nota:
El resultado es una cadena de bytes ascii, si necesita unicode, lo más fácil es
escape
la cadena de bytes que luego se puede decodificardecodeURIComponent
para producir la cadena unicode.Dado que
escape
está en desuso, podríamos cambiar nuestra función para admitir unicode directamente sin la necesidadescape
oString.fromCharCode
podemos producir una%
cadena de escape lista para la decodificación de URI.nJoy!
fuente
split
la cadena, ya que puede indexar una cadena de JavaScript como una matriz.s.split('').forEach(function ...
puede ser sustituido por[].forEach.call(s, function ...
. Debería ser mucho más rápido, ya que no tiene que dividir la cadena.He probado las rutinas de Javascript en phpjs.org y han funcionado bien.
Primero probé las rutinas sugeridas en la respuesta elegida por Ranhiru Cooray - http://ntt.cc/2008/01/19/base64-encoder-decoder-with-javascript.html
Descubrí que no funcionaban en todas las circunstancias. Escribí un caso de prueba donde estas rutinas fallan y las publiqué en GitHub en:
https://github.com/scottcarter/base64_javascript_test_data.git
También publiqué un comentario en la publicación del blog en ntt.cc para alertar al autor (en espera de moderación; el artículo es antiguo, así que no estoy seguro de si se publicará un comentario).
fuente
Prefiero usar los métodos de codificación / decodificación bas64 de CryptoJS , la biblioteca más popular para algoritmos criptográficos estándar y seguros implementados en JavaScript utilizando las mejores prácticas y patrones.
fuente
En Node.js podemos hacerlo de manera simple
fuente
Para frameworks JavaScripts donde no hay
atob
método y en caso de que no desee importar bibliotecas externas, esta es una función corta que lo hace.Obtendría una cadena que contiene un valor codificado en Base64 y devolverá una matriz decodificada de bytes (donde la matriz de bytes se representa como una matriz de números donde cada número es un número entero entre 0 y 255 inclusive).
Recursos utilizados: RFC-4648 Sección 4
fuente