오늘은 Discuz 포럼의 스타일을 바꾸고 싶었는데, 의외로 스타일 파일을 다운로드해 보니 Base64로 암호화되어 있는 것을 발견했습니다.
Xiao Lin은 해독된 페이지를 추천했으며 추출된 코드는 다음과 같습니다.
다음과 같이 코드 코드를 복사합니다.
<!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
<html>
<머리>
<title>Base64 및 URL, 16진수 인코딩 및 디코딩</title>
<meta name=description content=클라이언트 측 JavaScript를 사용하여 Base64 또는 URL 인코딩으로 데이터를 인코딩하거나 디코딩합니다. />
<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=단축 아이콘 href=http://ostermiller.org/favicon.ico type=image/x-icon />
<스크립트 언어=자바스크립트 유형=텍스트/자바스크립트>
<!--
함수 urlDecode(str){
str=str.replace(new RegExp('//+','g'),' ');
이스케이프 해제(str)를 반환합니다.
}
함수 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 = 새 배열(
'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;
함수 setBase64Str(str){
base64Str = str;
base64Count = 0;
}
함수 readBase64(){
if (!base64Str) END_OF_INPUT을 반환합니다.
if (base64Count >= base64Str.length) return END_OF_INPUT;
var c = base64Str.charCodeAt(base64Count) & 0xff;
base64Count++;
c를 반환;
}
함수 encodeBase64(str){
setBase64Str(str);
var 결과 = '';
var inBuffer = new Array(3);
var lineCount = 0;
var 완료 = 거짓;
while (!done && (inBuffer[0] = readBase64()) != END_OF_INPUT){
inBuffer[1] = readBase64();
inBuffer[2] = readBase64();
결과 += (base64Chars[ inBuffer[0] >> 2 ]);
if (inBuffer[1] != END_OF_INPUT){
결과 += (base64Chars [(( inBuffer[0] << 4 ) & 0x30) | (inBuffer[1] >> 4) ]);
if (inBuffer[2] != END_OF_INPUT){
결과 += (base64Chars [((inBuffer[1] << 2) & 0x3c) | (inBuffer[2] >> 6) ]);
결과 += (base64Chars [inBuffer[2] & 0x3F]);
} 또 다른 {
결과 += (base64Chars [((inBuffer[1] << 2) & 0x3c)]);
결과 +=('=');
완료 = 사실;
}
} 또 다른 {
결과 += (base64Chars [(( inBuffer[0] << 4 ) & 0x30)]);
결과 +=('=');
결과 +=('=');
완료 = 사실;
}
lineCount += 4;
if (lineCount >= 76){
결과 += ('/n');
라인카운트 = 0;
}
}
결과 반환;
}
함수 readReverseBase64(){
if (!base64Str) END_OF_INPUT을 반환합니다.
동안 (참){
if (base64Count >= base64Str.length) return END_OF_INPUT;
var nextCharacter = base64Str.charAt(base64Count);
base64Count++;
if (reverseBase64Chars[nextCharacter]){
return reverseBase64Chars[nextCharacter];
}
if (nextCharacter == 'A') 0을 반환합니다.
}
END_OF_INPUT을 반환합니다.
}
함수 ntos(n){
n=n.toString(16);
if (n.길이 == 1) n=0+n;
n=%+n;
이스케이프 해제(n)를 반환합니다.
}
함수 decodeBase64(str){
setBase64Str(str);
var 결과 = ;
var inBuffer = new Array(4);
var 완료 = 거짓;
while (!done && (inBuffer[0] = readReverseBase64()) != END_OF_INPUT
&& (inBuffer[1] = readReverseBase64()) != END_OF_INPUT){
inBuffer[2] = readReverseBase64();
inBuffer[3] = readReverseBase64();
결과 += ntos((((inBuffer[0] << 2) & 0xff)| inBuffer[1] >> 4));
if (inBuffer[2] != END_OF_INPUT){
결과 += ntos((((inBuffer[1] << 4) & 0xff)| inBuffer[2] >> 2));
if (inBuffer[3] != END_OF_INPUT){
결과 += ntos((((inBuffer[2] << 6) & 0xff) | inBuffer[3]));
} 또 다른 {
완료 = 사실;
}
} 또 다른 {
완료 = 사실;
}
}
결과 반환;
}
var digitArray = 새로운 배열('0','1','2','3','4','5','6','7','8','9','a', 'b','c','d','e','f');
함수 toHex(n){
var 결과 = ''
var 시작 = true;
for (var i=32; i>0;){
i-=4;
var 숫자 = (n>>i) & 0xf;
if (!start || 숫자 != 0){
시작 = 거짓;
결과 += digitArray[숫자];
}
}
return (결과==''?'0':결과);
}
함수 패드(str, len, pad){
var 결과 = str;
for (var i=str.length; i<len; i++){
결과 = 패드 + 결과;
}
결과 반환;
}
함수 encodeHex(str){
var 결과 = ;
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));
var 결과 = ;
var nextchar = ;
for (var i=0; i<str.length; i++){
nextchar += str.charAt(i);
if (nextchar.length == 2){
결과 += ntos(eval('0x'+nextchar));
다음문자 = ;
}
}
결과 반환;
}
//--></script>
</head>
<본문>
<양식 이름=코드 제출 시=false 반환()>
<textarea name=text style='width:100%;height:75%;' onfocus='if (this.value==여기에 인코딩하거나 디코딩할 텍스트를 입력하세요.){this.value=;}'>텍스트를 입력하세요 여기에서 인코딩하거나 디코딩하세요.</textarea>
<테이블>
<tr><td 정렬=가운데>
<입력 값=인코드 유형=버튼 onclick=document.code.text.value=urlEncode(document.code.text.value);>
</td><td align=center>
URL
</td><td align=center>
<입력 값=디코드 유형=버튼 onclick=document.code.text.value=urlDecode(document.code.text.value);>
</td></tr>
<tr><td 정렬=가운데>
<입력 값=인코드 유형=버튼 onclick=document.code.text.value=encodeBase64(document.code.text.value);>
</td><td align=center>
베이스 64
</td><td align=center>
<입력 값=디코드 유형=버튼 onclick=document.code.text.value=decodeBase64(document.code.text.value);>
</td></tr>
<tr><td 정렬=가운데>
<입력값=인코딩 유형=버튼 onclick=document.code.text.value=encodeHex(document.code.text.value);>
</td><td align=center>
마녀
</td><td align=center>
<입력 값=디코드 유형=버튼 onclick=document.code.text.value=decodeHex(document.code.text.value);>
</td></tr>
<tr><td 정렬=가운데>
</td><td align=center>
<입력 유형=재설정 값=지우기>
</td><td align=center>
</td></tr>
</table>
</form>
<시간>
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>이 프로그램은 무료 소프트웨어이므로 재배포하거나 수정할 수 있습니다.
Free에서 발행한 GNU General Public License의 조건에 따라
소프트웨어 기반, 라이센스 버전 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>Stephen Ostermiller</a> 2003-2006</ 피></div>
</body>
</html>