Ascii85
HTML
<b>Ascii85 JavaScript Implementation</b>
<br />
<input type="text" id="a" />
<input type="submit" value="encode" onclick="$('#b').val(Ascii85.encode($('#a').val()));$('#a').val('');" />
<br />
<input type="text" id="b" />
<input type="submit" value="decode" onclick="$('#a').val(Ascii85.decode($('#b').val()));$('#b').val('');" />
CSS
body { padding: 50px; font-family: Arial, Helvetica, sans-serif; }
input { padding: 5px; margin: 5px 0; }
input[type=text] { width: 200px; }
JavaScript
// Ascii85 JavaScript implementation
// 2012.10.16 Jim Herrero
var Ascii85 = {
// defaults
_alphabet: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%()*+,-./:;=?@[]^_{}",
_prefix: "<~",
_suffix: "~>",
// functions
encode: function(input, alphabet, pre, suf) {
var alphabet = alphabet || Ascii85._alphabet,
pre = pre || Ascii85._prefix,
suf = suf || Ascii85._suffix,
useShort = alphabet.length > 85,
output = "", buffer, val, i, j, l;
for (i = 0, l = input.length; i < l;) {
buffer = [0,0,0,0];
for (j = 0; j < 4; j++)
if(input[i])
buffer[j] = input.charCodeAt(i++);
for (val = buffer[3], j = 2; j >= 0; j--)
val = val*256+buffer[j];
if (useShort && !val)
output += alphabet[86];
else if (useShort && val == 0x20202020)
output += alphabet[85];
else {
for (j = 0; j < 5; j++) {
output += alphabet[val%85];
val = Math.floor(val/85);
}
}
}
return pre+output+suf;
},
decode: function(input, alphabet, pre, suf) {
var alphabet = alphabet || Ascii85._alphabet,
pre = pre || Ascii85._prefix,
suf = suf || Ascii85._suffix,
useShort = alphabet.length > 85,
output = "", buffer, val, i, j, l;
var match = input.match( new RegExp(pre+"(.*?)"+suf) );
input = match ? match[1] || "" : "";
if(useShort){
var spacer = alphabet[43]+alphabet[67]+alphabet[53]+alphabet[27]+alphabet[10];
input = input.replace(new RegExp(alphabet[86],'g'), new Array(6).join(alphabet[0]))
.replace(new RegExp(alphabet[85],'g'), spacer);
}
for(i = 0, l = input.length; i < l;) {
...