Apakah ada metode dalam JavaScript yang dapat digunakan untuk menyandikan dan mendekode string menggunakan pengkodean base64?
javascript
base64
Mo.
sumber
sumber
Jawaban:
Beberapa browser seperti Firefox, Chrome, Safari, Opera dan IE10 + dapat menangani Base64 secara asli. Lihatlah pertanyaan Stackoverflow ini . Ini menggunakan
btoa()
danatob()
fungsinya .Untuk JavaScript sisi server (Node), Anda dapat menggunakan
Buffer
s untuk mendekode.Jika Anda mencari solusi lintas-peramban, ada pustaka yang ada seperti CryptoJS atau kode seperti:
http://ntt.cc/2008/01/19/base64-encoder-decoder-with-javascript.html
Dengan yang terakhir, Anda perlu menguji fungsi secara menyeluruh untuk kompatibilitas lintas browser. Dan kesalahan sudah dilaporkan .
sumber
new Buffer('Hello, world!').toString('base64');
new Buffer('SGVsbG8sIHdvcmxkIQ==', 'base64').toString('ascii');
(sumber)new Buffer(string)
sudah usang.Buffer.from(jwt.split('.')[1], 'base64').toString()
Di browser berbasis Gecko / WebKit (Firefox, Chrome dan Safari) dan Opera, Anda dapat menggunakan btoa () dan atob () .
Jawaban asli: Bagaimana Anda bisa menyandikan string ke Base64 di JavaScript?
sumber
Internet Explorer 10+
Lintas browser
Ditulis ulang dan dimodulasi UTF-8 dan Base64 Javascript Encoding dan Decoding Libraries / Modul untuk AMD, CommonJS, Nodejs dan Browser. Kompatibel lintas browser.
dengan Node.js
Inilah cara Anda menyandikan teks normal ke base64 di Node.js:
Dan di sini adalah bagaimana Anda mendekodekan string yang disandikan base64:
dengan Dojo.js
Untuk menyandikan larik byte menggunakan dojox.encoding.base64:
Untuk memecahkan kode string yang disandikan base64:
bower instal angular-base64
Tapi bagaimana caranya?
Jika Anda ingin mempelajari lebih lanjut tentang bagaimana base64 dikodekan secara umum, dan dalam JavaScript khususnya, saya akan merekomendasikan artikel ini: Ilmu komputer dalam JavaScript: pengkodean Base64
sumber
c2
dan kemungkinanc1
danc3
sehingga tidak akan bekerja dengan"use strict"
seperti dijelaskan di atas.Ini adalah versi posting Sniper yang diperketat. Ini menganggap string base64 terbentuk dengan baik tanpa carriage return. Versi ini menghilangkan beberapa loop, menambahkan
&0xff
perbaikan dari Yaroslav, menghilangkan tertinggal nol, ditambah sedikit kode golf.sumber
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++;
Fungsi Dekode JavaScript Base64 pendek dan cepat tanpa Failsafe:
sumber
https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_.22Unicode_Problem.22
sumber
Proyek php.js memiliki implementasi JavaScript dari banyak fungsi PHP.
base64_encode
danbase64_decode
sudah termasuk.sumber
Apakah ada yang mengatakan kode golf? =)
Berikut ini adalah upaya saya untuk meningkatkan cacat saya sambil mengejar ketinggalan zaman. Disediakan untuk kenyamanan Anda.
Apa yang sebenarnya saya kejar adalah implementasi asinkron dan yang mengejutkan saya ternyata
forEach
bertentangan dengan$([]).each
implementasi metode JQuery yang sangat sinkron.Jika Anda juga memiliki gagasan gila dalam pikiran penundaan 0
window.setTimeout
akan menjalankan decode base64 asynchronous dan menjalankan fungsi callback dengan hasil ketika selesai.@Toothbrush menyarankan "indeks string seperti array", dan singkirkan
split
. Rutin ini tampaknya sangat aneh dan tidak yakin seberapa kompatibel itu, tapi itu mengenai birdie lain jadi mari kita memilikinya.Ketika mencoba untuk menemukan informasi lebih lanjut tentang string JavaScript sebagai array saya menemukan tip pro ini menggunakan
/./g
regex untuk melangkah melalui string. Ini mengurangi ukuran kode bahkan lebih dengan mengganti string di tempat dan menghilangkan kebutuhan menjaga variabel kembali.Namun jika Anda mencari sesuatu yang sedikit lebih tradisional mungkin yang berikut ini lebih sesuai dengan selera Anda.
Saya tidak memiliki masalah nol tertinggal sehingga ini dihapus untuk tetap di bawah standar tetapi harus dengan mudah diselesaikan dengan a
trim()
atau atrimRight()
jika Anda mau, jika ini menimbulkan masalah bagi Anda.yaitu.
catatan:
Hasilnya adalah string byte ascii, jika Anda memerlukan unicode, yang paling mudah adalah
escape
string byte yang kemudian dapat didekodekan dengandecodeURIComponent
untuk menghasilkan string unicode.Karena
escape
sudah tidak digunakan lagi, kita dapat mengubah fungsi kita untuk mendukung unicode secara langsung tanpa perluescape
atauString.fromCharCode
kita dapat menghasilkan%
string yang lolos yang siap untuk decoding URI.nJoy!
sumber
split
menggunakan string, karena Anda dapat mengindeks string JavaScript seperti array.s.split('').forEach(function ...
dapat digantikan oleh[].forEach.call(s, function ...
. Seharusnya lebih cepat, karena tidak harus membelah string.Saya telah mencoba rutinitas Javascript di phpjs.org dan mereka telah bekerja dengan baik.
Saya pertama kali mencoba rutinitas yang disarankan dalam jawaban yang dipilih oleh Ranhiru Cooray - http://ntt.cc/2008/01/19/base64-encoder-decoder-with-javascript.html
Saya menemukan bahwa mereka tidak bekerja dalam semua keadaan. Saya menulis uji kasus di mana rutinitas ini gagal dan mempostingnya ke GitHub di:
https://github.com/scottcarter/base64_javascript_test_data.git
Saya juga memposting komentar ke posting blog di ntt.cc untuk mengingatkan penulis (menunggu moderasi - artikel sudah tua jadi tidak yakin apakah komentar akan diposting).
sumber
Saya lebih suka menggunakan metode encode / decode bas64 dari CryptoJS , perpustakaan paling populer untuk algoritma kriptografi standar dan aman yang diterapkan dalam JavaScript menggunakan praktik dan pola terbaik.
sumber
Di Node.js kita bisa melakukannya dengan cara sederhana
sumber
Untuk kerangka kerja JavaScripts di mana tidak ada
atob
metode dan jika Anda tidak ingin mengimpor perpustakaan eksternal, ini adalah fungsi pendek yang melakukannya.Ini akan mendapatkan string yang berisi nilai yang disandikan Base64 dan akan mengembalikan array byte yang didekodekan (di mana array byte diwakili sebagai array angka di mana setiap angka adalah bilangan bulat antara 0 dan 255 inklusif).
Sumber yang digunakan: RFC-4648 Bagian 4
sumber