Skip to content

Instantly share code, notes, and snippets.

@firstspring1845
Last active August 29, 2015 14:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save firstspring1845/059612a4eb3a4934ac05 to your computer and use it in GitHub Desktop.
Save firstspring1845/059612a4eb3a4934ac05 to your computer and use it in GitHub Desktop.
Base64ライブラリ
function btoa(bin){
//Base64テーブル
//英(大|小)文字&数字&記号二種(+/)
var table = 'ABCDEFGHJIKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
var res = ''
while(bin.length !== 0){
//24bitごとに区切る
var chunk = bin.slice(0, 3)
var bits = 0
for(var i = 0; i < chunk.length; i += 1){
bits += chunk.charCodeAt(i) << 16 - (8 * i)
}
//出力文字数は入力+1
var outlen = chunk.length + 1
//6bitごとに区切ってテーブルを元に符号化
for(var i = 0; i < outlen; i += 1){
res += table.charAt(bits >> 18 - (6 * i) & 63)
}
//パディング
for(var i = 0; i < 4 - outlen; i += 1){
res += '='
}
bin = bin.slice(3)
}
return res
};
function atob(asc){
//パディングの除去
asc = asc.replace(/=/g,'')
var table = 'ABCDEFGHJIKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
var res = ''
while(asc.length !== 0){
//24bitごとに区切る
var chunk = asc.slice(0, 4)
var bits = 0
//テーブルを元に復号化
for(var i = 0; i < chunk.length; i += 1){
bits += table.indexOf(chunk.charAt(i)) << 18 - (6 * i)
}
//符号化の逆なので-1
var outlen = chunk.length - 1
//8bitごとに区切って元のデータに戻す
for(var i = 0; i < outlen; i += 1){
res += String.fromCharCode(bits >> 16 - (8 * i) & 255)
}
asc = asc.slice(4)
}
return res
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment