Skip to content

Instantly share code, notes, and snippets.

@sp3c73r2038
Last active September 23, 2020 06:13
Show Gist options
  • Save sp3c73r2038/5472119 to your computer and use it in GitHub Desktop.
Save sp3c73r2038/5472119 to your computer and use it in GitHub Desktop.
pure javascript implemented base64 encoding/decoding library.
;
(
function () {
'use strict'
var root = this
var b64
if (typeof exports !== 'undefined') {
b64 = exports
}
else {
b64 = root.b64 = {}
}
b64.VERSION = '0.0.1'
var keyStr = b64.keyStr = "ABCDEFGHIJKLMNOP" +
"QRSTUVWXYZabcdef" +
"ghijklmnopqrstuv" +
"wxyz0123456789+/" +
"="
var encode64 = b64.encode64 = function (input) {
input = escape(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)
chr1 = chr2 = chr3 = ""
enc1 = enc2 = enc3 = enc4 = ""
} while (i < input.length)
return output
}
var decode64 = b64.decode64 = function (input) {
var output = ""
var chr1, chr2, chr3 = ""
var enc1, enc2, enc3, enc4 = ""
var i = 0
// remove all characters that are not A-Z, a-z, 0-9, +, /, or =
var base64test = /[^A-Za-z0-9\+\/\=]/g
if (base64test.exec(input)) {
alert("There were invalid base64 characters in the input text.\n" +
"Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\n" +
"Expect errors in decoding.")
}
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)
}
chr1 = chr2 = chr3 = ""
enc1 = enc2 = enc3 = enc4 = ""
} while (i < input.length)
return unescape(output)
}
}
).call(this)
;
// example
var text = 'hello world! 你好! こんにちは!'
var encoded = b64.encode64(text)
console.log(encoded)
// "aGVsbG8lMjB3b3JsZCUyMSUyMCV1NEY2MCV1NTk3RCUyMSUyMCV1MzA1MyV1MzA5MyV1MzA2QiV1MzA2MSV1MzA2RiV1RkYwMQ=="
var decoded = b64.decode64(encoded)
console.log(decoded) // 'hello world! 你好! こんにちは!'
// notice to export b64 when using with require.js.
@TendiF
Copy link

TendiF commented Sep 23, 2020

thanks for this mate, I've modified this version with export default for my needed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment