关于加密解密 Base64 and URL and Hex Encoding and Decoding

ASP教程 2025-08-17

今天想换一下Discuz论坛的风格,谁知下载风格文件后,发现竟然是通过Base64加密过的
小林给推荐了个解密的页面,提取出代码如下:
复制代码代码如下:
< !DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
< html >
< head >
< title >Base64 and URL and Hex Encoding and Decoding< /title >
< meta name="description" content="Encodes or decodes data in Base64 or URL encoding using client side JavaScript" / >
< meta name="keywords" content="base64, base 64, urlencode, urldecode, hexencode, hex encode, hexdecode hex decode, javascript base64, javascript base 64, javascript urlencode, javascript urldecode, javascript hexencode, javascript hexdecode" / >
< link rel="shortcut icon" href="http://ostermil***ler.org/favicon.ico" type="image/x-icon" / >
< script language=javascript type="text/javascript" >
< !--
function urlDecode(str){
str=str.replace(new RegExp('//+','g'),' ');
return unescape(str);
}
function urlEncode(str){
str=escape(str);
str=str.replace(new RegExp('//+','g'),'%2B');
return str.replace(new RegExp('%20','g'),'+');
}
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;
}
return END_OF_INPUT;
}
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%;' onfocus='if (this.value=="Enter text to encode or decode here."){this.value="";}' >Enter text to encode or decode here.< /textarea >
< table >
< tr >< td align=center >
< input value="Encode" type=button onclick="document.code.text.value=urlEncode(document.code.text.value);" >
< /td >< td align=center >
URL
< /td >< td align=center >
< input value="Decode" type=button onclick="document.code.text.value=urlDecode(document.code.text.value);" >
< /td >< /tr >
< 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 >
< hr >
Base64 encode/decode was ported from a < a href="http://ost*e*r*miller.org/utils/Base64.html" >Java Base64 encoder/decoder< /a >.< br >
Base64 encode/decode was ported to < a href="http://*os*termi*ller.org/base64_actionscript.html" >Macromedia Actionscript< /a >.< br >
< h3 >License< /h3 >
< p >This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your option)
any later version.< /p >
< p >This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the
< a href="http://www.***gnu.org/copyleft/gpl.html" >GNU
General Public License< /a > for more details.< /p >
< div style="padding:0.2cm;" >< a href="http://o*sterm**iller.org/calc/" >More converters, calculators, and other JavaScript goodies< /a >< /div >
< div style="padding:0.2cm;text-align:right;" >< a href="http://oste*rmi*l*ler.org/" >ostermiller.org< /a > (< a href="http://oste*rmi*l*ler.org/siteindex.html" >site index< /a >)< /div >
< div style="padding:0.2cm;" >< p >Copyright < a href="http://oste*rmi*l*ler.org/contact.pl?regarding=JavaScript+Encoding" class=mail >Stephen Ostermiller< /a > 2003-2006< /p >< /div >
< /body >
< /html >