Heute wollte ich den Stil des Discuz-Forums ändern. Nach dem Herunterladen der Stildatei stellte ich unerwartet fest, dass sie mit Base64 verschlüsselt war.
Xiao Lin empfahl eine entschlüsselte Seite und der extrahierte Code lautet wie folgt:
Kopieren Sie den Codecode wie folgt:
<!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
<html>
<Kopf>
<title>Base64 und URL- und Hex-Kodierung und -Dekodierung</title>
<meta name=description content=Codiert oder decodiert Daten in Base64 oder URL-Codierung mit clientseitigem 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://ostermiller.org/favicon.ico type=image/x-icon />
<script language=javascript type=text/javascript>
<!--
Funktion urlDecode(str){
str=str.replace(new RegExp('//+','g'),' ');
return unescape(str);
}
Funktion 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 = neues 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;
Funktion setBase64Str(str){
base64Str = str;
base64Count = 0;
}
Funktion readBase64(){
if (!base64Str) return END_OF_INPUT;
if (base64Count >= base64Str.length) return END_OF_INPUT;
var c = base64Str.charCodeAt(base64Count) & 0xff;
base64Count++;
return c;
}
Funktion 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]);
} anders {
result += (base64Chars [((inBuffer[1] << 2) & 0x3c)]);
Ergebnis += ('=');
erledigt = wahr;
}
} anders {
result += (base64Chars [(( inBuffer[0] << 4 ) & 0x30)]);
Ergebnis += ('=');
Ergebnis += ('=');
erledigt = wahr;
}
Zeilenanzahl += 4;
if (lineCount >= 76){
Ergebnis += ('/n');
lineCount = 0;
}
}
Ergebnis zurückgeben;
}
Funktion readReverseBase64(){
if (!base64Str) return END_OF_INPUT;
while (wahr){
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;
}
Funktion ntos(n){
n=n.toString(16);
if (n.length == 1) n=0+n;
n=%+n;
return unescape(n);
}
Funktion 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]));
} anders {
erledigt = wahr;
}
} anders {
erledigt = wahr;
}
}
Ergebnis zurückgeben;
}
var digitArray = neues Array('0','1','2','3','4','5','6','7','8','9','a', 'b','c','d','e','f');
Funktion toHex(n){
var result = ''
var start = true;
für (var i=32; i>0;){
i-=4;
var digit = (n>>i) & 0xf;
if (!start || Ziffer != 0){
start = false;
result += digitArray[digit];
}
}
return (result==''?'0':result);
}
Funktion pad(str, len, pad){
var result = str;
for (var i=str.length; i<len; i++){
Ergebnis = Pad + Ergebnis;
}
Ergebnis zurückgeben;
}
Funktion encodeHex(str){
var result = ;
for (var i=0; i<str.length; i++){
result += pad(toHex(str.charCodeAt(i)&0xff),2,'0');
}
Ergebnis zurückgeben;
}
Funktion 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 = ;
}
}
Ergebnis zurückgeben;
}
//--></script>
</head>
<Körper>
<form name=code onsubmit=return false()>
<textarea name=text style='width:100%;height:75%;' onfocus='if (this.value==Geben Sie hier den zu kodierenden oder zu dekodierenden Text ein.){this.value=;}'>Geben Sie Text ein hier kodieren oder dekodieren.</textarea>
<Tabelle>
<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>
Basis 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>
Verhexen
</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>
<Eingabetyp=Wert zurücksetzen=Löschen>
</td><td align=center>
</td></tr>
</table>
</form>
<hr>
Base64-Codierung/Decodierung wurde von einem <a href=http://ostermiller.org/utils/Base64.html>Java Base64-Encoder/Decoder</a> portiert.<br>
Base64-Kodierung/Dekodierung wurde auf <a href=http://ostermiller.org/base64_actionscript.html>Macromedia Actionscript</a> portiert.<br>
<h3>Lizenz</h3>
<p>Dieses Programm ist freie Software; Sie können es weiterverbreiten und/oder ändern
unter den Bedingungen der GNU General Public License, wie von Free veröffentlicht
Software Foundation; entweder Version 2 der Lizenz oder (nach Ihrer Wahl)
jede spätere Version.</p>
<p>Dieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird,
aber OHNE JEGLICHE GARANTIE; auch ohne die stillschweigende Garantie der MARKTGÄNGIGKEIT
oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK
<a href=http://www.gnu.org/copyleft/gpl.html>GNU
Weitere Informationen finden Sie in der General Public License</a>.</p>
<div style=padding:0.2cm;><a href=http://ostermiller.org/calc/>Weitere Konverter, Rechner und andere JavaScript-Extras</a></div>
<div style=padding:0.2cm;text-align:right;><a href=http://ostermiller.org/>ostermiller.org</a> (<a href=http://ostermiller.org/siteindex .html>Site-Index</a>)</div>
<div style=padding:0.2cm;><p>Copyright <a href=http://ostermiller.org/contact.pl?regarding=JavaScript+Encoding class=mail>Stephen Ostermiller</a> 2003-2006</ p></div>
</body>
</html>