Сегодня захотел изменить стиль форума Discuz. Неожиданно скачав файл стиля, я обнаружил, что он зашифрован с помощью Base64.
Сяо Линь рекомендовал расшифрованную страницу, извлеченный код выглядит следующим образом:
Скопируйте код кода следующим образом:
<!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
<html>
<голова>
<title>Base64, URL-адрес и шестнадцатеричное кодирование и декодирование</title>
<meta name=description content=Кодирует или декодирует данные в формате Base64 или кодировку URL с использованием клиентского JavaScript />
<meta name=keywords content=base64, base 64, urlencode, urldecode, шестнадцатеричный код, шестнадцатеричное кодирование, шестнадцатеричный декодирование, 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 />
<язык сценария=тип javascript=текст/javascript>
<!--
функция urlDecode(str){
str=str.replace(new RegExp('//+','g'),' ');
вернуть unescape(str);
}
функция urlEncode(str){
стр = побег (стр);
str=str.replace(new RegExp('//+','g'),'%2B');
return str.replace(new RegExp('%20','g'),'+');
}
вар END_OF_INPUT = -1;
вар base64Chars = новый массив(
«А», «Б», «В», «Г», «Е», «Ж», «Г», «Ч»,
«Я», «J», «К», «Л», «М», «Н», «О», «П»,
«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','+','/'
);
варverseBase64Chars = новый массив();
for (var i=0; я <base64Chars.length; я++){
verseBase64Chars[base64Chars[i]] = я;
}
вар base64Str;
вар base64Count;
функция setBase64Str(str){
base64Str = ул;
base64Count = 0;
}
функция readBase64(){
если (!base64Str) вернуть END_OF_INPUT;
если (base64Count >= base64Str.length) вернуть END_OF_INPUT;
вар c = base64Str.charCodeAt(base64Count) & 0xff;
base64Count++;
вернуть с;
}
функция encodeBase64(str){
setBase64Str(стр);
вар результат = '';
вар inBuffer = новый массив (3);
вар lineCount = 0;
вар сделано = ложь;
while (!done && (inBuffer[0] = readBase64()) != END_OF_INPUT){
inBuffer[1] = readBase64();
inBuffer[2] = readBase64();
результат += (base64Chars[inBuffer[0] >> 2]);
если (inBuffer[1] != END_OF_INPUT){
result += (base64Chars [(( inBuffer[0] << 4 ) & 0x30) | (inBuffer[1] >> 4) ]);
если (inBuffer[2] != END_OF_INPUT){
result += (base64Chars [((inBuffer[1] << 2) & 0x3c) | (inBuffer[2] >> 6) ]);
результат += (base64Chars [inBuffer[2] и 0x3F]);
} еще {
результат += (base64Chars [((inBuffer[1] << 2) & 0x3c)]);
результат += ('=');
сделано = правда;
}
} еще {
результат += (base64Chars [(( inBuffer[0] << 4 ) & 0x30)]);
результат += ('=');
результат += ('=');
сделано = правда;
}
строкаCount += 4;
если (lineCount >= 76){
результат += ('/n');
линияКаунт = 0;
}
}
вернуть результат;
}
функция readReverseBase64(){
если (!base64Str) вернуть END_OF_INPUT;
пока (правда){
если (base64Count >= base64Str.length) вернуть END_OF_INPUT;
вар nextCharacter = base64Str.charAt(base64Count);
base64Count++;
если (reverseBase64Chars[nextCharacter]){
вернутьverseBase64Chars[nextCharacter];
}
если (nextCharacter == 'A') вернуть 0;
}
вернуть END_OF_INPUT;
}
функция ntos(n){
n=n.toString(16);
если (n.length == 1) n=0+n;
n=%+n;
вернуть unescape (n);
}
функция decodeBase64(str){
setBase64Str(стр);
вар результат = ;
вар inBuffer = новый массив (4);
вар сделано = ложь;
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));
если (inBuffer[2] != END_OF_INPUT){
result += ntos((((inBuffer[1] << 4) & 0xff)| inBuffer[2] >> 2));
если (inBuffer[3] != END_OF_INPUT){
result += ntos((((inBuffer[2] << 6) & 0xff) | inBuffer[3]));
} еще {
сделано = правда;
}
} еще {
сделано = правда;
}
}
вернуть результат;
}
var digitArray = новый массив('0','1','2','3','4','5','6','7','8','9','a', 'б','в','д','е','е');
функция toHex(n){
вар результат = ''
вар начало = правда;
для (var i=32; i>0;){
я-=4;
вар цифра = (n>>i) & 0xf;
if (!start || цифра != 0){
начало = ложь;
результат += digitArray[цифра];
}
}
return (result==''?'0':result);
}
функция Pad(str, len, Pad){
результат вар = ул;
for (var i=str.length; i<len; i++){
результат = площадка + результат;
}
вернуть результат;
}
функция encodeHex(str){
вар результат = ;
for (var i=0; i<str.length; i++){
результат += Pad(toHex(str.charCodeAt(i)&0xff),2,'0');
}
вернуть результат;
}
функция decodeHex(str){
str = str.replace(new RegExp(s/[^0-9a-zA-Z]//g));
вар результат = ;
вар следующийchar = ;
for (var i=0; i<str.length; i++){
следующийchar += str.charAt(i);
если (nextchar.length == 2){
результат += ntos(eval('0x'+nextchar));
следующийсимвол = ;
}
}
вернуть результат;
}
//--></script>
</голова>
<тело>
<имя формы=код onsubmit=return false()>
<textarea name=text style='width:100%;height:75%;' onfocus='if (this.value==Введите здесь текст для кодирования или декодирования.){this.value=;}'>Введите текст для кодируйте или декодируйте здесь.</textarea>
<таблица>
<tr><td align=center>
<входное значение=Тип кодирования=кнопка при нажатии=document.code.text.value=urlEncode(document.code.text.value);>
</td><td align=center>
URL-адрес
</td><td align=center>
<входное значение=Тип декодирования=кнопка при нажатии=document.code.text.value=urlDecode(document.code.text.value);>
</td></tr>
<tr><td align=center>
<входное значение=Тип кодирования=кнопка onclick=document.code.text.value=encodeBase64(document.code.text.value);>
</td><td align=center>
База 64
</td><td align=center>
<входное значение=Тип декодирования=кнопка при нажатии=document.code.text.value=decodeBase64(document.code.text.value);>
</td></tr>
<tr><td align=center>
<входное значение=Тип кодирования=кнопка при нажатии=document.code.text.value=encodeHex(document.code.text.value);>
</td><td align=center>
Шестигранник
</td><td align=center>
<входное значение=тип декодирования=кнопка при нажатии=document.code.text.value=decodeHex(document.code.text.value);>
</td></tr>
<tr><td align=center>
</td><td align=center>
<тип ввода=значение сброса=Очистить>
</td><td align=center>
</td></tr>
</таблица>
</форма>
<час>
Кодирование/декодирование Base64 было перенесено из <a href=http://ostermiller.org/utils/Base64.html>кодера/декодера Java Base64</a>.<br>
Кодирование/декодирование Base64 было перенесено в <a href=http://ostermiller.org/base64_actionscript.html>Macromedia Actionscript</a>.<br>
<h3>Лицензия</h3>
<p>Эта программа является бесплатным программным обеспечением, вы можете распространять ее и/или изменять;
в соответствии с условиями Стандартной общественной лицензии GNU, опубликованной Free
Software Foundation либо версия 2 Лицензии, либо (по вашему выбору);
любая более поздняя версия.</p>
<p>Эта программа распространяется в надежде, что она будет полезна,
но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, даже без подразумеваемой гарантии ТОРГОВОЙ ПРИГОДНОСТИ;
или ПРИГОДНОСТЬ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. См. раздел.
<a href=http://www.gnu.org/copyleft/gpl.html>GNU
Стандартная общественная лицензия</a> для получения более подробной информации.</p>
<div style=padding:0.2cm;><a href=http://ostermiller.org/calc/>Больше конвертеров, калькуляторов и других полезных функций JavaScript</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>индекс сайта</a>)</div>
<div style=padding:0.2cm;><p>Авторские права <a href=http://ostermiller.org/contact.pl?regarding=JavaScript+Encoding class=mail>Стивен Остермиллер</a> 2003–2006</ p></div>
</тело>
</html>