Gibt es in JavaScript Methoden, mit denen eine Zeichenfolge mithilfe der Base64-Codierung codiert und decodiert werden kann?
javascript
base64
Mo.
quelle
quelle
Antworten:
Einige Browser wie Firefox, Chrome, Safari, Opera und IE10 + können Base64 nativ verarbeiten. Schauen Sie sich diese Stackoverflow-Frage an . Es benutzt
btoa()
undatob()
funktioniert .Für serverseitiges JavaScript (Node) können Sie
Buffer
s zum Dekodieren verwenden.Wenn Sie sich für eine browserübergreifende Lösung entscheiden, gibt es vorhandene Bibliotheken wie CryptoJS oder Code wie:
http://ntt.cc/2008/01/19/base64-encoder-decoder-with-javascript.html
Bei letzterem müssen Sie die Funktion gründlich auf Cross-Browser-Kompatibilität testen. Und Fehler wurde bereits gemeldet .
quelle
new Buffer('Hello, world!').toString('base64');
new Buffer('SGVsbG8sIHdvcmxkIQ==', 'base64').toString('ascii');
new Buffer(string)
veraltet ist.Buffer.from(jwt.split('.')[1], 'base64').toString()
In Gecko / WebKit-basierten Browsern (Firefox, Chrome und Safari) und Opera können Sie btoa () und atob () verwenden .
Ursprüngliche Antwort: Wie können Sie eine Zeichenfolge in JavaScript in Base64 codieren?
quelle
Internet Explorer 10+
Browserübergreifend
Neu geschriebene und modularisierte UTF-8- und Base64-Javascript-Codierungs- und Decodierungsbibliotheken / -module für AMD, CommonJS, Nodejs und Browser. Browserübergreifend kompatibel.
mit Node.js.
So codieren Sie normalen Text in base64 in Node.js:
Und so dekodieren Sie Base64-codierte Zeichenfolgen:
mit Dojo.js
So codieren Sie ein Array von Bytes mit dojox.encoding.base64:
So dekodieren Sie eine Base64-codierte Zeichenfolge:
Laube eckig-base64 einbauen
Aber wie?
Wenn Sie mehr darüber erfahren möchten, wie base64 im Allgemeinen und in JavaScript im Besonderen codiert wird, würde ich diesen Artikel empfehlen: Informatik in JavaScript: Base64-Codierung
quelle
c2
und wahrscheinlichc1
undc3
so wird es nicht funktionieren mit ,"use strict"
wie oben definiert.Hier ist eine verschärfte Version von Snipers Post. Es wird eine gut geformte Base64-Zeichenfolge ohne Wagenrücklauf vorausgesetzt. Diese Version eliminiert ein paar Loops, fügt den
&0xff
Fix von Yaroslav hinzu, eliminiert nachgestellte Nullen und ein bisschen Code Golf.quelle
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++;
Kurze und schnelle Base64 JavaScript Decode Funktion ohne Ausfallsicherheit:
quelle
https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_.22Unicode_Problem.22
quelle
Das php.js- Projekt enthält JavaScript-Implementierungen vieler PHP-Funktionen.
base64_encode
undbase64_decode
sind enthalten.quelle
Hat jemand Code Golf gesagt? =)
Das Folgende ist mein Versuch, mein Handicap zu verbessern und gleichzeitig mit der Zeit Schritt zu halten. Wird für Ihre Bequemlichkeit geliefert.
Was ich eigentlich wollte, war eine asynchrone Implementierung, und zu meiner Überraschung stellt sich heraus
forEach
, dass die$([]).each
Implementierung der JQuery- Methode sehr synchron ist.Wenn Sie auch solche verrückten Vorstellungen hatten, führt eine 0-Verzögerung
window.setTimeout
die base64-Dekodierung asynchron aus und führt die Rückruffunktion mit dem Ergebnis aus, wenn Sie fertig sind.@Toothbrush schlug vor, "einen String wie ein Array zu indizieren" und das zu entfernen
split
. Diese Routine scheint wirklich seltsam und nicht sicher zu sein, wie kompatibel sie sein wird, aber sie trifft einen anderen Birdie, also lasst es uns haben.Beim Versuch, weitere Informationen zu JavaScript-Zeichenfolgen als Array zu finden, bin ich auf diesen Pro-Tipp gestoßen, bei dem ein
/./g
regulärer Ausdruck verwendet wurde, um eine Zeichenfolge zu durchlaufen. Dies reduziert die Codegröße noch mehr, indem die Zeichenfolge ersetzt wird und keine Rückgabevariable mehr erforderlich ist.Wenn Sie jedoch nach etwas Traditionellerem suchen, ist das Folgende vielleicht mehr nach Ihrem Geschmack.
Ich hatte kein nachfolgendes Null-Problem, daher wurde dieses entfernt, um unter dem Nennwert zu bleiben, aber es sollte leicht mit einem
trim()
oder einem gelöst werden können,trimRight()
wenn Sie dies bevorzugen, sollte dies ein Problem für Sie darstellen.dh.
Hinweis:
Das Ergebnis ist eine ASCII-Byte-Zeichenfolge. Wenn Sie einen Unicode benötigen, ist
escape
die Byte-Zeichenfolge am einfachsten, mit der danndecodeURIComponent
die Unicode-Zeichenfolge dekodiert werden kann .Da
escape
dies veraltet ist, können wir unsere Funktion ändern, um Unicode direkt zu unterstützen, ohne dass dies erforderlich ist,escape
oderString.fromCharCode
wir können eine%
maskierte Zeichenfolge erstellen, die für die URI-Decodierung bereit ist.nJoy!
quelle
split
die Zeichenfolge nicht verwenden, da Sie eine JavaScript-Zeichenfolge wie ein Array indizieren können.s.split('').forEach(function ...
kann ersetzt werden durch[].forEach.call(s, function ...
. Es sollte viel schneller sein, da es den String nicht teilen muss.Ich habe die Javascript-Routinen auf phpjs.org ausprobiert und sie haben gut funktioniert.
Ich habe zuerst die Routinen ausprobiert, die in der von Ranhiru Cooray gewählten Antwort vorgeschlagen wurden - http://ntt.cc/2008/01/19/base64-encoder-decoder-with-javascript.html
Ich stellte fest, dass sie nicht unter allen Umständen funktionierten. Ich habe einen Testfall geschrieben, in dem diese Routinen fehlschlagen, und sie auf GitHub gepostet unter:
https://github.com/scottcarter/base64_javascript_test_data.git
Ich habe auch einen Kommentar zum Blog-Beitrag auf ntt.cc gepostet, um den Autor zu benachrichtigen (wartet auf Moderation - der Artikel ist alt, daher nicht sicher, ob ein Kommentar veröffentlicht wird).
quelle
Ich würde lieber die bas64-Codierungs- / Decodierungsmethoden von CryptoJS verwenden , der beliebtesten Bibliothek für standardmäßige und sichere kryptografische Algorithmen, die in JavaScript mithilfe von Best Practices und Mustern implementiert sind.
quelle
In Node.js können wir das auf einfache Weise tun
quelle
Für JavaScripts-Frameworks, bei denen es keine
atob
Methode gibt und Sie keine externen Bibliotheken importieren möchten, ist dies eine kurze Funktion, die dies ausführt.Es würde eine Zeichenfolge erhalten, die einen Base64-codierten Wert enthält und ein decodiertes Array von Bytes zurückgibt (wobei das Array von Bytes als Array von Zahlen dargestellt wird, wobei jede Zahl eine Ganzzahl zwischen 0 und einschließlich 255 ist).
Verwendete Ressourcen: RFC-4648 Abschnitt 4
quelle