Re: based64 decoding in javascript

Giganews Newsgroups
Subject: Re: based64 decoding in javascript
Posted by:  VK (schools_ri…@yahoo.com)
Date: 13 Sep 2006

mistral wrote:
> I need help implement based64 decoding in javascript: a function to
> return a script that has been base64 encoded into a string (decoding in
> client side). For encode, online base64 encoder tool was used.

As an option:

/**
* The base64 encode/decode functions have been taken
* from 64 code from Tyler Akins --http://rumkin.com
*/

var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    keyStr+= "abcdefghijklmnopqrstuvwxyz0123456789+/=";

function encode64(input) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
do {
  chr1 = input.charCodeAt(i++);
  chr2 = input.charCodeAt(i++);
  chr3 = input.charCodeAt(i++);
  enc1 = chr1 >> 2;
  enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
  enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
  enc4 = chr3 & 63;
  if (isNaN(chr2)) {
  enc3 = enc4 = 64;
  } else if (isNaN(chr3)) {
  enc4 = 64;
  }
  output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) +
  keyStr.charAt(enc3) + keyStr.charAt(enc4);
} while (i < input.length);
return output;
}

function decode64(input) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
do {
  enc1 = keyStr.indexOf(input.charAt(i++));
  enc2 = keyStr.indexOf(input.charAt(i++));
  enc3 = keyStr.indexOf(input.charAt(i++));
  enc4 = keyStr.indexOf(input.charAt(i++));
  chr1 = (enc1 << 2) | (enc2 >> 4);
  chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
  chr3 = ((enc3 & 3) << 6) | enc4;
  output = output + String.fromCharCode(chr1);
  if (enc3 != 64) {
  output = output + String.fromCharCode(chr2);
  }
  if (enc4 != 64) {
  output = output + String.fromCharCode(chr3);
  }
} while (i < input.length);
return output;
}
/**
* End of borrowed code from
* Tyler Akins --http://rumkin.com
*/

eval(decode64(myInput));
// that can be "interesting" things with your code on eval()
// depending on what is being executed. I wash my hands :-)

Also Mozilla has non-documented functions atob(string) to decode
and btoa(string) to encode. They work much faster then custom
functions but can handle only relatively small strings (because
they originally were made for encoded keys exchange).

Replies

In response to

based64 decoding in javascript posted by mistral on 13 Sep 2006