博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】Javascript Base64编码与解码
阅读量:6251 次
发布时间:2019-06-22

本文共 5373 字,大约阅读时间需要 17 分钟。

<
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">
&nbsp;
<
input
onclick
="
doDecode();
"
type
=button
value
="Decode"
name
="decode">
&nbsp;
<
input
type
="checkbox"
value
="hex"
name
="opt"
id
="opt">
Hex
&nbsp;
</
div
> <
textarea
id
="dest"
rows
=11
cols
=60
value
=""
name
="dest"></
textarea
> </
div
> </
div
> </
div
> </
BODY
> </
html
> 本文转自齐师傅博客园博客,原文链接:http://www.cnblogs.com/youring2/archive/2013/03/04/2942880.html,如需转载请自行联系原作者
你可能感兴趣的文章
如何启动或关闭oracle的归档(ARCHIVELOG)模式
查看>>
EIGRP负载均衡过程全解
查看>>
TUP第十三期:客户端性能优化实战经验分享
查看>>
Lua脚本语言介绍和开发
查看>>
centos7关闭防火墙
查看>>
实现Redis的主从复制
查看>>
均方根误差 RMSE
查看>>
Spring 3 JSON and datatables
查看>>
XBOX更换160G大硬盘的笑话
查看>>
俄羅斯大神 Ratiborus 的推特
查看>>
3C产品和3C认证
查看>>
面试算法题-合并2个有序数组
查看>>
windows下安装cygwin后ssh服务无法启动的解决办法
查看>>
C语言的const限定符
查看>>
python3简单爬虫
查看>>
maven工程jar冲突解决办法
查看>>
给PATH变量添加路径--用Enki学Linux系列(6)
查看>>
Juniper SRX 1firefly-perimeter 2.1X47-D20.7 端口交换机属性配置
查看>>
Redis+Mysql模式和内存+硬盘模式的异同
查看>>
RedHat Linux 4/5下LVM 在线扩容
查看>>