본문 바로가기

개발

Classic ASP JSON, DLL추가, JScript, AES256-CBC

페이코인 Classic ASP 연동 모듈 만들면서 느낀 점 몇가지 정리

 

1. JSON 라이브러리 "숨 쉰채" 발견

https://webdevbros.net/2007/04/26/generate-json-from-asp-datatypes.html?redirect=true 

https://github.com/tugrul/aspjson

인터넷 찾아보면 아무도 없다고 하는데, 놀랍게도 있었다.

 

2. DLL 추가하는 법

https://wefu.tistory.com/50

아주 잘 정리되어있다.

경우에 따라 Classic ASP 도 DLL 사용 가능하다.

Set abc = Server.CreateObject("추가할때쓴이름.해당모듈펑션네임")

형태로 호출한다.

 

3. JScript 가 뭐하는 놈이야

Classic ASP 는 딱 2가지 언어를 지원한다. VBScript, JScript. (Default = VBScript)

JScript 는 Javascript 의 Windows 쪽 명칭이다.... 뭐 그런 말들이 많다.

ECMAScript = Javascript = JScript 다 라는 말이 있는데,

옛날엔 맞는 말이었으나 현재는 아니다.

현재는 ECMAScript 해마다 재정이 계속 되고, 신기능 추가가 많이 되어서, Javascript 생김세가 많이 달렸다.

기본적인 예로 ()=>{} 와 같이 화살표=>표시로 함수 간단하게 쓰기 등등

최신 문법들은 지원하지 않는다. 더불어 JSON.stringify 같은 것들도 지원 안함.

한 2008년 쯤에 머물러 있는 Javascript = JScript 정도로 이해할 수 있겠다.

혹시 아니라면 알려주세요

 

4.  JScript 와 VBScript 는 혼용할 수 없다.

VBScript 는 <% %> 태그

JScript 는 <script runat="server" language="jscript"> ... </script> 태그

를 사용한다.

하지만 <% %> 태그가 먼저 실행되고, <script> 태그가 나중에 실행된다.

그래서 의도한대로 실행이 안되는 경우가 종종 발생한다.

가장 좋은 해결 방법은 둘 중 하나만 사용하는 것이다.

출처: http://www.roblocher.com/technotes/ssjscript.html

 

5. Java 모듈을 많이 사용한다.

수많은 언어들이 리눅스 OS 를 위해 존재하기 때문에,

윈도우 기반의 ASP는 .NET 없이 할 수 있는게 정말정말정말 적다. 거의 손수 구현해야한다.

따라서 Java 모듈 사용하는 경우가 많다고 들었다. (OS를 타지 않아서)

  public class Simple
  {
     public int SimpleFn ( int x )
     {
        return x * 2;
     }
  }

위와 같은 간단한 java 코드가 있다면, class 파일로 컴파일 해준다.

class파일을 적당한 디렉터리에 옮겨주고, JavaReg Utility 를 사용하여 COM 파일로 만들어준다. (Visual J++ 혹은 Microsoft SDK for Java 사용)

  <html><body>
  <h1>Simple Test
  </h1>
                                                                       
The result from SIMPLE is:    <% Set SimpleObj = Server.CreateObject("Simple") %>
  <% = SimpleObj.SimpleFn(5) %>
  <hr>
  </body></html>

이렇게 Server.CreateObject 로 호출하면 된다.
출처 : http://gnujava.com/board/article_view.jsp?article_no=676&board_no=11&table_cd=EPAR04&table_no=04

 

6. Base64 인코딩

기록용으로 남긴다.

<%
'''''''''''''''''''''''''/
''/ 어떤분이 외국소스에서 구해 인터넷에 올려놓은 소스입니다.
''/ 쿠키에 많이 사용하더군요.
'''''''''''''''''''''''''/
const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
dim nl
' zero based arrays
dim Base64EncMap(63)
dim Base64DecMap(127)
'''''''''''''''''''''''''/
''/ must be called before using anything else
''/ 다른 작업이전에 먼저 호출해야하는 함수입니다.
'''''''''''''''''''''''''/
PUBLIC SUB initCodecs()
' init vars
	nl = "<P>" & chr(13) & chr(10)

' setup base 64
	dim max, idx

	max = len(BASE_64_MAP_INIT)
	for idx = 0 to max - 1
' one based string
		Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)
	next
	for idx = 0 to max - 1

	Base64DecMap(ASC(Base64EncMap(idx))) = idx
	next
END SUB

'''''''''''''''''''''''''/
''/ encode base 64 encoded string
''/ Base64로 인코딩하는 함수입니다.
'''''''''''''''''''''''''/
PUBLIC FUNCTION base64Encode(plain)
	if len(plain) = 0 then
		base64Encode = ""
		exit function
	end if

	dim ret, ndx, by3, first, second, third
	by3 = (len(plain) \ 3) * 3
	ndx = 1

	do while ndx <= by3

		first = asc(mid(plain, ndx+0, 1))
		second = asc(mid(plain, ndx+1, 1))
		third = asc(mid(plain, ndx+2, 1))

		ret = ret & Base64EncMap( (first \ 4) AND 63 )
		ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
		ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) )
		ret = ret & Base64EncMap( third AND 63)
		ndx = ndx + 3
	loop

' check for stragglers
	if by3 < len(plain) then
		first = asc(mid(plain, ndx+0, 1))
		ret = ret & Base64EncMap( (first \ 4) AND 63 )
		if (len(plain) MOD 3 ) = 2 then
			second = asc(mid(plain, ndx+1, 1))
			ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
			ret = ret & Base64EncMap( ((second * 4) AND 60) )
		else
			ret = ret & Base64EncMap( (first * 16) AND 48)
			ret = ret & "="	
		end if
		ret = ret & "="
	end if
	base64Encode = ret
END FUNCTION
'''''''''''''''''''''''''/
''/ decode base 64 encoded string
''/ Base64로 디코딩하는 함수 입니다.
'''''''''''''''''''''''''/
PUBLIC FUNCTION base64Decode(scrambled)
	if len(scrambled) = 0 then
		base64Decode = ""
		exit function
	end if    
' ignore padding
	dim realLen
	realLen = len(scrambled)
	do while mid(scrambled, realLen, 1) = "="
		realLen = realLen - 1
	loop
	dim ret, ndx, by4, first, second, third, fourth
	ret = ""
	by4 = (realLen \ 4) * 4
	ndx = 1
	do while ndx <= by4
		first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
		second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
		third = Base64DecMap(asc(mid(scrambled, ndx+2, 1)))
		fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1)))
		ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
		ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15) )
		ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63) )
		ndx = ndx + 4
	loop

' check for stragglers, will be 2 or 3 characters
	if ndx < realLen then
		first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
		second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
		ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
		if realLen MOD 4 = 3 then
			third = Base64DecMap(asc(mid(scrambled,ndx+2,1)))
			ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15) )
		end if
	end if
	base64Decode = ret   
END FUNCTION
'''''''''''''''''''''''''/
''/ initialize
''/ 초기화
'''''''''''''''''''''''''/
call initCodecs
'''''''''''''''''''''''''/
''/ Testing code
''/ 테스트 코딩
'''''''''''''''''''''''''/
'  dim inp, encode
'  inp = request.QueryString("input")
'  encode = base64Encode(inp)
'  response.write "Encoded value = " & encode & nl
'  response.write "Decoded value = " & base64Decode(encode) & nl 
%>

출처 : https://l2j.co.kr/229

반응형