Last active
August 29, 2015 14:22
-
-
Save firstspring1845/059612a4eb3a4934ac05 to your computer and use it in GitHub Desktop.
Base64ライブラリ
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 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