JavaScript Base64/Hex Encoder/Decoder.(ZT)

转载 2004年08月19日 15:19:00

<html>
<head>
<title>Base64 and Hex Encoding and Decoding</title>
<meta name="Description" content="Encodes or decodes data in Base64 or Hex using client side JavaScript.">
<meta name="Keywords" content="encode, decode, base64, base 64, javascript">
<script language=javascript type="text/javascript">
<!--
var END_OF_INPUT = -1;

var base64Chars = new Array(
    'A','B','C','D','E','F','G','H',
    'I','J','K','L','M','N','O','P',
    'Q','R','S','T','U','V','W','X',
    'Y','Z','a','b','c','d','e','f',
    'g','h','i','j','k','l','m','n',
    'o','p','q','r','s','t','u','v',
    'w','x','y','z','0','1','2','3',
    '4','5','6','7','8','9','+','/'
);

var reverseBase64Chars = new Array();
for (var i=0; i < base64Chars.length; i++){
    reverseBase64Chars[base64Chars[i]] = i;
}

var base64Str;
var base64Count;
function setBase64Str(str){
    base64Str = str;
    base64Count = 0;
}
function readBase64(){   
    if (!base64Str) return END_OF_INPUT;
    if (base64Count >= base64Str.length) return END_OF_INPUT;
    var c = base64Str.charCodeAt(base64Count) & 0xff;
    base64Count++;
    return c;
}
function encodeBase64(str){
    setBase64Str(str);
    var result = '';
    var inBuffer = new Array(3);
    var lineCount = 0;
    var done = false;
    while (!done && (inBuffer[0] = readBase64()) != END_OF_INPUT){
        inBuffer[1] = readBase64();
        inBuffer[2] = readBase64();
        result += (base64Chars[ inBuffer[0] >> 2 ]);
        if (inBuffer[1] != END_OF_INPUT){
            result += (base64Chars [(( inBuffer[0] << 4 ) & 0x30) | (inBuffer[1] >> 4) ]);
            if (inBuffer[2] != END_OF_INPUT){
                result += (base64Chars [((inBuffer[1] << 2) & 0x3c) | (inBuffer[2] >> 6) ]);
                result += (base64Chars [inBuffer[2] & 0x3F]);
            } else {
                result += (base64Chars [((inBuffer[1] << 2) & 0x3c)]);
                result += ('=');
                done = true;
            }
        } else {
            result += (base64Chars [(( inBuffer[0] << 4 ) & 0x30)]);
            result += ('=');
            result += ('=');
            done = true;
        }
        lineCount += 4;
        if (lineCount >= 76){
            result += ('/n');
            lineCount = 0;
        }
    }
    return result;
}
function readReverseBase64(){  
    if (!base64Str) return END_OF_INPUT;
    while (true){     
        if (base64Count >= base64Str.length) return END_OF_INPUT;
        var nextCharacter = base64Str.charAt(base64Count);
        base64Count++;
        if (reverseBase64Chars[nextCharacter]){
            return reverseBase64Chars[nextCharacter];
        }
        if (nextCharacter == 'A') return 0;
    }
}

function ntos(n){
    n=n.toString(16);
    if (n.length == 1) n="0"+n;
    n="%"+n;
    return unescape(n);
}

function decodeBase64(str){
    setBase64Str(str);
    var result = "";
    var inBuffer = new Array(4);
    var done = false;
    while (!done && (inBuffer[0] = readReverseBase64()) != END_OF_INPUT
        && (inBuffer[1] = readReverseBase64()) != END_OF_INPUT){
        inBuffer[2] = readReverseBase64();
        inBuffer[3] = readReverseBase64();
        result += ntos((((inBuffer[0] << 2) & 0xff)| inBuffer[1] >> 4));
        if (inBuffer[2] != END_OF_INPUT){
            result +=  ntos((((inBuffer[1] << 4) & 0xff)| inBuffer[2] >> 2));
            if (inBuffer[3] != END_OF_INPUT){
                result +=  ntos((((inBuffer[2] << 6)  & 0xff) | inBuffer[3]));
            } else {
                done = true;
            }
        } else {
            done = true;
        }
    }
    return result;
}

var digitArray = new Array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f');
function toHex(n){
    var result = ''
    var start = true;
    for (var i=32; i>0;){
        i-=4;
        var digit = (n>>i) & 0xf;
        if (!start || digit != 0){
            start = false;
            result += digitArray[digit];
        }
    }
    return (result==''?'0':result);
}

function pad(str, len, pad){
    var result = str;
    for (var i=str.length; i<len; i++){
        result = pad + result;
    }
    return result;
}

function encodeHex(str){
    var result = "";
    for (var i=0; i<str.length; i++){
        result += pad(toHex(str.charCodeAt(i)&0xff),2,'0');
    }
    return result;
}

function decodeHex(str){
    str = str.replace(new RegExp("s/[^0-9a-zA-Z]//g"));
    var result = "";
    var nextchar = "";
    for (var i=0; i<str.length; i++){
        nextchar += str.charAt(i);
        if (nextchar.length == 2){
            result += ntos(eval('0x'+nextchar));
            nextchar = "";
        }
    }
    return result;
   
}
//--></script>
</head>
<body>
<form name=code onsubmit="return false()">
<textarea name=text style='width:100%;height:75%;'>Enter text to encode or decode here.</textarea>
<table>
<tr><td align=center>
<input value="Encode" type=button onclick="document.code.text.value=encodeBase64(document.code.text.value);">
</td><td align=center>
Base 64
</td><td align=center>
<input value="Decode" type=button onclick="document.code.text.value=decodeBase64(document.code.text.value);">
</td></tr>
<tr><td align=center>
<input value="Encode" type=button onclick="document.code.text.value=encodeHex(document.code.text.value);">
</td><td align=center>
Hex
</td><td align=center>
<input value="Decode" type=button onclick="document.code.text.value=decodeHex(document.code.text.value);">
</td></tr>
<tr><td align=center>
</td><td align=center>
<input type=reset value=Clear>
</td><td align=center>
</td></tr>
</table>
</form>
</body>
</html>

2.2.2 Android Base64,Hex,URLEncoding编码和解码,以及AES,DES,MD5加密和解密的工具类

Android Base64,Hex,URLEncoding编码和解码,以及AES,DES,MD5加密和解密的工具类
  • Rodulf
  • Rodulf
  • 2016年02月18日 23:51
  • 1615

Base64 编解码C语言版本

include const char base[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; ...
  • JeffreyLau7
  • JeffreyLau7
  • 2016年10月08日 09:59
  • 347

Base64系列第二篇 python中使用Base64编码解码

本篇《Base64系列第二篇 python中使用Base64编码解码》将介绍如何使用python来完成Base64的编码解码 在python中使用base64编码和解码都是非常方便的,在import ...
  • MoreWindows
  • MoreWindows
  • 2013年10月29日 10:33
  • 34479

Javascript实现base64的加密解密

这几天使用PHP向前端传值的时候,遇到一个问题,要将代码传过去赋值。如果使用urlencode()和urldecode()函数,就会出现js无法解码的情况,因为php和js的相关函数算法不一致。于是准...
  • u012369749
  • u012369749
  • 2017年06月27日 12:53
  • 942

Java 和 JavaScript 之间真正通用的Base64编码

转载自:http://blog.csdn.net/coolmasoft/article/details/2913634   在开发Java  Web应用的时候,可能会在服务器端用Java做Base...
  • xiaoniaofeifei35
  • xiaoniaofeifei35
  • 2017年04月15日 22:07
  • 919

hex字符串与byte数组互转

Toolkit类中的工具方法 /** * hex字符串转byte数组 * 2个hex转为一个byte * @param src * @return */ public st...
  • afer198215
  • afer198215
  • 2013年07月11日 15:44
  • 18042

Base64算法的三种方法

今天又学了一下实现Base64算法的三种方法,记录一下,以便复习。Base64算法的实现: java的jdk实现; Commons Codec实现; Bouncy Castle实现。 jdk Base...
  • Tom91
  • Tom91
  • 2017年03月18日 20:12
  • 784

java中BASE64与urlUncode的编码与解码

下面是urlUncode的解码: 先模拟一段从客户端接收到的URL码 //读取文件并转为字节码 FileInputStream fs = new FileInputStream(new Fi...
  • BabyNiu411
  • BabyNiu411
  • 2013年08月15日 15:14
  • 1706

uuid.hex主键生成器

对于数据库主键生成策略,大家都了解一些,尤其是关于hibernate的主键生成更是方便很多。 而大多数人只知道使用,hibernate给定的生成策略,我今天想说的是主键生成器,就是自己写一个类来生成...
  • lushuaiyin
  • lushuaiyin
  • 2013年02月19日 14:24
  • 4131

base64编码和aes加密和解密配置文件

如果需要加密配置文件,或者某些文件的,请到上面gitub上去下。有什么意见,大家提一下。 采用的base64加上AES16字节秘钥加密,安全非常高,比较实用的程序,接口也很简单。 #pragma ...
  • tajon1226
  • tajon1226
  • 2016年08月25日 02:25
  • 648
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaScript Base64/Hex Encoder/Decoder.(ZT)
举报原因:
原因补充:

(最多只允许输入30个字)