10
votes

Base64url décodage via JavaScript?

Donc je suis exclu. Je sais qu'il y a beaucoup de codeurs / décodeurs de base64 pour JS, mais pas pour la variation de base64url modifiée (et Facebook-Favorisée). Jusqu'à présent, la recherche sur Stackoverflow est devenue sec.

Oui, je pourrais utiliser PHP ou une autre bibliothèque côté serveur pour décoder cela, mais j'essaie de garder cette universelle quelle que soit la plate-forme que j'utilise ... Par exemple, si je devais héberger un HTML- Seule l'application Facebook sur Amazon S3 / Cloudfront et utilise uniquement leur JS SDK et JQuery pour s'occuper des formulaires de traitement et obtenir des données.

Cela dit, quelqu'un connaît-il des décodeurs spécifiques à base64url pour JavaScript?

Merci d'avance!


2 commentaires

base64url codage est spécifié dans RFC 4648, les codages de données de base16, base32 et base64 . La seule différence entre base64 et base64url est deux valeurs (62 et 63). Il suffit de remplacer "+" avec "-" et "/" avec "_" .


@jww serait-ce correct? var base64url = fonction (ARR) {retour BTOA (astr.replace (/ \ + / g, '-'). Remplacez (//// g, '_')). Remplacer (/ \ = = = + $ / M, '')} avec la dialogue = Strave?


3 Réponses :


-7
votes
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('') );

1 commentaires

Cela utilise les chariots de cartographie normaux et non url-sécurité. Voir RFC 4648 §5 ( en.wikipedia.org/wiki/base64 )



4
votes

solution: xxx pré>

à l'aide de ce grand codé / décode de base64: http://code.google.com/p/stringencoders/source/browse/trunk/javascript/base64.js p>

dépend également de La méthode PADRIGHT: P>

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 commentaires

Salut Siméon ... Je pense que cela pourrait fonctionner, mais je pense que j'ai aussi besoin de remplacer "-" et "+" avec "_" et "/" - bon point de départ cependant. J'espérais en trouver un avec tout emballé dans la même bibliothèque, mais je suppose que je pourrais simplement avoir à modifier une bibliothèque un peu après.


Étrange ... En fait, je viens de faire une version JS de cette réponse: Stackoverflow.com/Questtions/1228701/...



17
votes

Utilisez-le avant de décoder:

var 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;
    }


1 commentaires

Ah ces moments où vous souhaitez que vous puissiez uplifier deux fois :)