Есть ли в JavaScript какие-либо методы, которые можно было бы использовать для кодирования и декодирования строки с использованием кодировки base64?
javascript
base64
Пн.
источник
источник
Ответы:
Некоторые браузеры, такие как Firefox, Chrome, Safari, Opera и IE10 +, могут работать с Base64 изначально. Посмотрите на этот вопрос Stackoverflow . Это использование
btoa()
иatob()
функции .Для серверного JavaScript (Node) вы можете использовать
Buffer
s для декодирования.Если вы собираетесь использовать кросс-браузерное решение, существуют существующие библиотеки, такие как CryptoJS или код, подобный следующему:
http://ntt.cc/2008/01/19/base64-encoder-decoder-with-javascript.html
Что касается последнего, вам необходимо тщательно протестировать функцию на совместимость с различными браузерами. И об ошибке уже сообщалось .
источник
new Buffer('Hello, world!').toString('base64');
new Buffer('SGVsbG8sIHdvcmxkIQ==', 'base64').toString('ascii');
(источник)new Buffer(string)
это устарело.Buffer.from(jwt.split('.')[1], 'base64').toString()
В браузерах на основе Gecko / WebKit (Firefox, Chrome и Safari) и Opera вы можете использовать btoa () и atob () .
Оригинальный ответ: Как вы можете кодировать строку в Base64 в JavaScript?
источник
Internet Explorer 10+
Кросс-браузер
Переписанные и модульные библиотеки / модули кодирования и декодирования JavaScript UTF-8 и Base64 для AMD, CommonJS, Nodejs и браузеров. Кросс-браузер совместим.
с Node.js
Вот как вы кодируете обычный текст в base64 в Node.js:
А вот как вы декодируете строки в кодировке base64:
с Dojo.js
Чтобы кодировать массив байтов с помощью dojox.encoding.base64:
Чтобы декодировать строку в кодировке base64:
беседка установить angular-base64
Но как?
Если вы хотите узнать больше о том, как base64 кодируется в целом, и, в частности, в JavaScript, я бы порекомендовал эту статью: Информатика в JavaScript: кодирование Base64
источник
c2
и , вероятно ,c1
иc3
поэтому он не будет работать с"use strict"
такими , как определено выше.Вот сжатая версия сообщения Снайпера. Предполагается, что правильно сформированная строка base64 без возврата каретки. Эта версия устраняет пару петель, добавляет
&0xff
исправление от Ярослава, устраняет завершающие нули, плюс немного кода гольфа.источник
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++;
Короткая и быстрая функция декодирования JavaScript Base64 без Failsafe:
источник
https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_.22Unicode_Problem.22
источник
В проекте php.js есть реализации JavaScript многих функций PHP.
base64_encode
иbase64_decode
включены.источник
Кто-то сказал код гольф? знак равно
Следующее - моя попытка улучшить мой гандикап, не отставая от времени. Поставляется для вашего удобства.
То, что я на самом деле преследовал, было асинхронной реализацией, и, к моему удивлению, оказалось, что
forEach
в отличие от$([]).each
реализации метода JQuery очень синхронно.Если вы также имели в виду такие сумасшедшие представления, задержка 0
window.setTimeout
запустит декодирование base64 асинхронно и выполнит функцию обратного вызова с результатом, когда это будет сделано.@Toothbrush предложил "проиндексировать строку как массив" и избавиться от
split
. Эта процедура кажется действительно странной и не уверенной, насколько она будет совместимой, но она поражает другую птичку, так что давайте ее.Пытаясь найти больше информации о строке JavaScript в виде массива, я наткнулся на этот профессиональный совет, используя
/./g
регулярное выражение для перехода по строке. Это еще больше уменьшает размер кода, заменяя строку на месте и избавляя от необходимости сохранять возвращаемую переменную.Однако, если вы ищете что-то более традиционное, возможно, вам больше понравится.
У меня не было завершающей нулевой проблемы, поэтому она была удалена, чтобы остаться на уровне номинала, но ее легко можно решить с помощью
trim()
или,trimRight()
если вы предпочитаете, если это создаст проблему для вас.то есть.
Примечание:
В результате получается строка байтов ascii, если вам нужен юникод, проще всего
escape
использовать байтовую строку, которую затем можно декодироватьdecodeURIComponent
для получения строки юникода.Так как
escape
это устарело, мы могли бы изменить нашу функцию для поддержки Юникода напрямую без необходимостиescape
илиString.fromCharCode
мы можем создать%
экранированную строку, готовую для декодирования URI.NJoy!
источник
split
строка, так как вы можете индексировать строку JavaScript как массив.s.split('').forEach(function ...
можно заменить на[].forEach.call(s, function ...
. Это должно быть намного быстрее, потому что не нужно разбивать строку.Я попробовал подпрограммы Javascript на phpjs.org, и они работали хорошо.
Сначала я попробовал процедуры, предложенные в выбранном ответе Ранхиру Курей - http://ntt.cc/2008/01/19/base64-encoder-decoder-with-javascript.html
Я обнаружил, что они не работают при любых обстоятельствах. Я написал тестовый пример, где эти подпрограммы потерпели неудачу, и разместил их на GitHub по адресу:
https://github.com/scottcarter/base64_javascript_test_data.git
Я также разместил комментарий к сообщению в блоге по адресу ntt.cc, чтобы предупредить автора (ожидает модерации - статья старая, поэтому не уверен, что комментарий будет опубликован).
источник
Я бы предпочел использовать методы кодирования / декодирования bas64 от CryptoJS , самой популярной библиотеки для стандартных и безопасных криптографических алгоритмов, реализованных в JavaScript с использованием лучших практик и шаблонов.
источник
В Node.js мы можем сделать это простым способом
источник
Для фреймворков JavaScripts, где нет
atob
метода и если вы не хотите импортировать внешние библиотеки, это короткая функция, которая делает это.Он получит строку, содержащую значение в кодировке Base64, и вернет декодированный массив байтов (где массив байтов представлен в виде массива чисел, где каждое число является целым числом от 0 до 255 включительно).
Использованные ресурсы: RFC-4648, Раздел 4
источник