Base64URL декодирование через JavaScript? - PullRequest
10 голосов
/ 08 марта 2011

Так что я в тупике. Я знаю, что есть много кодеров / декодеров Base64 для JS, но не для модифицированного (и одобренного Facebook) варианта Base64URL. Пока что поиск по стеку завершился неудачей.

Да, я мог бы использовать PHP или другую серверную библиотеку для декодирования этого, но я пытаюсь сохранить универсальность независимо от используемой платформы ... например, если бы я должен был разместить HTML только приложение Facebook на Amazon S3 / CloudFront и использует только их JS SDK и jQuery для обработки форм и получения данных.

Тем не менее, кто-нибудь знает какие-либо специфичные для Base64URL декодеры для JavaScript?

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 08 марта 2011

Решение:

var b64str = base64.encode('foo bar');

// fix padding according to the new format
b64str = b64str.padRight(b64str.length + (4 - b64str.length % 4) % 4, '=');

Использование этого замечательного base64 кодирования / декодирования: http://code.google.com/p/stringencoders/source/browse/trunk/javascript/base64.js

Также зависит от метода padRight:

String.prototype.padRight = function(n, pad){
    t = this;
    if(n > this.length)
        for(i = 0; i < n-this.length; i++)
            t += pad;
    return t;
}
2 голосов
/ 14 августа 2018

используйте это для декодирования:

decode = function(input) {
        // Replace non-url compatible chars with base64 standard chars
        input = input
            .replace(/-/g, '+')
            .replace(/_/g, '/');

        // Pad out with standard base64 required padding characters
        var pad = input.length % 4;
        if(pad) {
          if(pad === 1) {
            throw new Error('InvalidLengthError: Input base64url string is the wrong length to determine padding');
          }
          input += new Array(5-pad).join('=');
        }

        return input;
    }

после использования этой функции вы можете использовать любой декодер base64

0 голосов
/ 08 марта 2011
var str = "string";
var encoded = btoa(str); // encode a string (base64)
var decoded = atob(encoded); //decode the string 
alert( ["string base64 encoded:",encoded,"\r\n", "string base64 decoded:",decoded].join('') );
...