Last active
September 23, 2020 06:13
-
-
Save sp3c73r2038/5472119 to your computer and use it in GitHub Desktop.
pure javascript implemented base64 encoding/decoding library.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; | |
( | |
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) | |
; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
thanks for this mate, I've modified this version with export default for my needed