Existe-t-il des méthodes en JavaScript qui pourraient être utilisées pour coder et décoder une chaîne en utilisant le codage base64?
271
Existe-t-il des méthodes en JavaScript qui pourraient être utilisées pour coder et décoder une chaîne en utilisant le codage base64?
Réponses:
Certains navigateurs tels que Firefox, Chrome, Safari, Opera et IE10 + peuvent gérer Base64 de manière native. Jetez un oeil à cette question Stackoverflow . Il utilise
btoa()
etatob()
fonctionne .Pour JavaScript côté serveur (Node), vous pouvez utiliser
Buffer
s pour décoder.Si vous optez pour une solution multi-navigateur, il existe des bibliothèques existantes comme CryptoJS ou du code comme:
http://ntt.cc/2008/01/19/base64-encoder-decoder-with-javascript.html
Avec ce dernier, vous devez tester minutieusement la fonction pour la compatibilité entre les navigateurs. Et une erreur a déjà été signalée .
la source
new Buffer('Hello, world!').toString('base64');
new Buffer('SGVsbG8sIHdvcmxkIQ==', 'base64').toString('ascii');
(source)new Buffer(string)
est déconseillé.Buffer.from(jwt.split('.')[1], 'base64').toString()
Dans les navigateurs basés sur Gecko / WebKit (Firefox, Chrome et Safari) et Opera, vous pouvez utiliser btoa () et atob () .
Réponse originale: Comment pouvez-vous encoder une chaîne en Base64 en JavaScript?
la source
Internet Explorer 10+
Navigateur croisé
Bibliothèques / modules de codage et de décodage Javascript UTF-8 et Base64 réécrits et modulaires pour AMD, CommonJS, Nodejs et navigateurs. Compatible avec plusieurs navigateurs.
avec Node.js
Voici comment vous encodez du texte normal en base64 dans Node.js:
Et voici comment décoder les chaînes encodées en base64:
avec Dojo.js
Pour coder un tableau d'octets à l'aide de dojox.encoding.base64:
Pour décoder une chaîne codée en base64:
bower install angular-base64
Mais comment?
Si vous souhaitez en savoir plus sur la façon dont le codage base64 est en général, et en JavaScript en particulier, je recommanderais cet article: Informatique en JavaScript: codage Base64
la source
c2
et probablementc1
etc3
donc elle ne fonctionnera pas avec"use strict"
comme défini ci-dessus.Voici une version resserrée du post de Sniper. Il suppose une chaîne base64 bien formée sans retour chariot. Cette version élimine quelques boucles, ajoute le
&0xff
correctif de Yaroslav, élimine les null à la fin, plus un peu de golf de code.la source
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++;
Fonction de décodage JavaScript Base64 courte et rapide sans sécurité intégrée:
la source
https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_.22Unicode_Problem.22
la source
Le projet php.js a des implémentations JavaScript de nombreuses fonctions PHP.
base64_encode
etbase64_decode
sont inclus.la source
Quelqu'un a-t-il dit le code golf? =)
Ce qui suit est ma tentative d'améliorer mon handicap tout en rattrapant le temps. Fourni pour votre commodité.
Ce que je cherchais en fait était une implémentation asynchrone et à ma grande surprise, il s'avère
forEach
que contrairement à l'$([]).each
implémentation de la méthode JQuery, elle est très synchrone.Si vous aviez également des notions aussi folles à l'esprit, un retard de 0
window.setTimeout
exécutera le décodage base64 de manière asynchrone et exécutera la fonction de rappel avec le résultat une fois terminé.@Toothbrush a suggéré "d'indexer une chaîne comme un tableau" et de se débarrasser de
split
. Cette routine semble vraiment étrange et je ne sais pas à quel point elle sera compatible, mais elle frappe un autre birdie, alors allons-y.En essayant de trouver plus d'informations sur la chaîne JavaScript en tant que tableau, je suis tombé sur cette astuce de pro en utilisant une
/./g
expression régulière pour parcourir une chaîne. Cela réduit encore plus la taille du code en remplaçant la chaîne en place et en éliminant le besoin de conserver une variable de retour.Si toutefois vous cherchiez quelque chose d'un peu plus traditionnel, peut-être que ce qui suit est plus à votre goût.
Je n'avais pas le problème null de fin, donc cela a été supprimé pour rester sous le pair mais il devrait facilement être résolu avec un
trim()
ou untrimRight()
si vous préférez, si cela vous pose un problème.c'est à dire.
Remarque:
Le résultat est une chaîne d'octets ascii, si vous avez besoin d'unicode, le plus simple est
escape
la chaîne d'octets qui peut ensuite être décodée avecdecodeURIComponent
pour produire la chaîne unicode.Comme il
escape
est obsolète, nous pourrions changer notre fonction pour prendre en charge directement unicode sans avoir besoin deescape
ouString.fromCharCode
nous pouvons produire une%
chaîne d'échappement prête pour le décodage URI.nJoy!
la source
split
la chaîne, car vous pouvez indexer une chaîne JavaScript comme un tableau.s.split('').forEach(function ...
peut être remplacé par[].forEach.call(s, function ...
. Cela devrait être beaucoup plus rapide, car il n'a pas à diviser la chaîne.J'ai essayé les routines Javascript sur phpjs.org et elles ont bien fonctionné.
J'ai d'abord essayé les routines suggérées dans la réponse choisie par Ranhiru Cooray - http://ntt.cc/2008/01/19/base64-encoder-decoder-with-javascript.html
J'ai trouvé qu'ils ne fonctionnaient pas en toutes circonstances. J'ai rédigé un cas de test où ces routines échouent et les ai publiées sur GitHub à l'adresse:
https://github.com/scottcarter/base64_javascript_test_data.git
J'ai également posté un commentaire sur le blog sur ntt.cc pour alerter l'auteur (en attente de modération - l'article est ancien, donc je ne sais pas si le commentaire sera publié).
la source
Je préfère utiliser les méthodes d'encodage / décodage bas64 de CryptoJS , la bibliothèque la plus populaire pour les algorithmes cryptographiques standard et sécurisés implémentés en JavaScript en utilisant les meilleures pratiques et modèles.
la source
Dans Node.js, nous pouvons le faire de manière simple
la source
Pour les frameworks JavaScripts où il n'y a pas de
atob
méthode et au cas où vous ne souhaitez pas importer de bibliothèques externes, c'est une fonction courte qui le fait.Il obtiendrait une chaîne qui contient une valeur encodée en Base64 et retournera un tableau décodé d'octets (où le tableau d'octets est représenté comme un tableau de nombres où chaque nombre est un entier compris entre 0 et 255 inclus).
Ressources utilisées: RFC-4648 Section 4
la source