<
html
> <
head
> <
META
HTTP-EQUIV
="MSThemeCompatible"
CONTENT
="Yes"> <
meta
http-equiv
="Content-Type"
content
="text/html; charset=unicode"> <
script
language
="JavaScript"
type
="text/javascript"
src
="../var.js"></
script
> <
title
>
Base64 Encode and Decode
</
title
> <
style
> </
style
> <
script
type
="text/javascript"
language
="javascript"> var
base64EncodeChars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
;
var
base64DecodeChars =
new
Array( -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
function
base64encode(str) {
var
out, i, len;
var
c1, c2, c3; len = str.length; i = 0; out =
""
;
while
(i < len) { c1 = str.charCodeAt(i++) & 0xff;
if
(i == len) { out += base64EncodeChars.charAt(c1 >> 2); out += base64EncodeChars.charAt((c1 & 0x3) << 4); out +=
"=="
;
break
; } c2 = str.charCodeAt(i++);
if
(i == len) { out += base64EncodeChars.charAt(c1 >> 2); out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4)); out += base64EncodeChars.charAt((c2 & 0xF) << 2); out +=
"="
;
break
; } c3 = str.charCodeAt(i++); out += base64EncodeChars.charAt(c1 >> 2); out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4)); out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6)); out += base64EncodeChars.charAt(c3 & 0x3F); }
return
out; }
function
base64decode(str) {
var
c1, c2, c3, c4;
var
i, len, out; len = str.length; i = 0; out =
""
;
while
(i < len) {
/* c1 */
do
{ c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; }
while
(i < len && c1 == -1);
if
(c1 == -1)
break
;
/* c2 */
do
{ c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; }
while
(i < len && c2 == -1);
if
(c2 == -1)
break
; out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
/* c3 */
do
{ c3 = str.charCodeAt(i++) & 0xff;
if
(c3 == 61)
return
out; c3 = base64DecodeChars[c3]; }
while
(i < len && c3 == -1);
if
(c3 == -1)
break
; out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
/* c4 */
do
{ c4 = str.charCodeAt(i++) & 0xff;
if
(c4 == 61)
return
out; c4 = base64DecodeChars[c4]; }
while
(i < len && c4 == -1);
if
(c4 == -1)
break
; out += String.fromCharCode(((c3 & 0x03) << 6) | c4); }
return
out; }
function
utf16to8(str) {
var
out, i, len, c; out =
""
; len = str.length;
for
(i = 0; i < len; i++) { c = str.charCodeAt(i);
if
((c >= 0x0001) && (c <= 0x007F)) { out += str.charAt(i); }
else if
(c > 0x07FF) { out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F)); out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F)); out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); }
else
{ out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F)); out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); } }
return
out; }
function
utf8to16(str) {
var
out, i, len, c;
var
char2, char3; out =
""
; len = str.length; i = 0;
while
(i < len) { c = str.charCodeAt(i++);
switch
(c >> 4) {
case
0:
case
1:
case
2:
case
3:
case
4:
case
5:
case
6:
case
7:
// 0xxxxxxx
out += str.charAt(i-1);
break
;
case
12:
case
13:
// 110x xxxx 10xx xxxx
char2 = str.charCodeAt(i++); out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
break
;
case
14:
// 1110 xxxx 10xx xxxx 10xx xxxx
char2 = str.charCodeAt(i++); char3 = str.charCodeAt(i++); out += String.fromCharCode(((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0));
break
; } }
return
out; }
function
CharToHex(str) {
var
out, i, len, c, h; out =
""
; len = str.length; i = 0;
while
(i < len) { c = str.charCodeAt(i++); h = c.toString(16);
if
(h.length < 2) h =
"0"
+ h; out +=
"\\x"
+ h +
" "
;
if
(i > 0 && i % 8 == 0) out +=
"\r\n"
; }
return
out; }
function
doEncode() {
var
src = document.getElementById(
'src'
).value; document.getElementById(
'dest'
).value = base64encode(utf16to8(src)); }
function
doDecode() {
var
src = document.getElementById(
'src'
).value;
var
opts = document.getElementById(
'opt'
);
if
(opts.checked) { document.getElementById(
'dest'
).value = CharToHex(base64decode(src)); }
else
{ document.getElementById(
'dest'
).value = utf8to16(base64decode(src)); } }
</
script
> </
head
> <
BODY
bgcolor
="#EAF0F8"
topmargin
="10"
leftmargin
="10"
rightmargin
="10"
bottommargin
="10"> <
div
id
="contain"
style
="
font-family
:
Tahoma
,
Arial
;
font-size
:
11pt"> <
div
id
="mainbg"> <
div
style
="
color
:
#000080
;
margin-bottom
:
10"><
b
>
Base64 Encode / Decode
</
b
></
div
> <
div
> <
textarea
id
="src"
rows
=11
cols
=60
value
=""
name
="src"></
textarea
> <
div
style
="
margin
:
10 0 10 0"> <
input
onclick
="
doEncode();
"
type
=button
value
="Encode"
name
="encode">
<
input
onclick
="
doDecode();
"
type
=button
value
="Decode"
name
="decode">
<
input
type
="checkbox"
value
="hex"
name
="opt"
id
="opt">
Hex
</
div
> <
textarea
id
="dest"
rows
=11
cols
=60
value
=""
name
="dest"></
textarea
> </
div
> </
div
> </
div
> </
BODY
> </
html
>