안규 공부방

ACTIVE SERVER PAGE > 암호화 [base64]

등록일 : 2017-07-04 18:14 조회수 : 93,072


 뭐 암호학이랑 상관은 없지만 암호화, 복호화란 이름으로 많이 쓰이는 BASE64 인코딩 디코딩 함수 중 한가지 입니다.
 사용법은 간단합니다. 아래와 같이 함수만 호출해 주시면 됩니다.

 '인코딩
 encodeValue = Base64encode("ABCDEF")
 response.Write encodeValue

 '디코딩
 decodeValue = Base64decode(encodeValue)
 response.Write decodeValue

 <%
 '/////////////////////////////////////////////////
 '/// initialize
 '/// 초기화
 '/////////////////////////////////////////////////
 call initCodecs

 '/////////////////////////////////////////////////
 '/// Testing code
 '/// 테스트 코딩
 '/////////////////////////////////////////////////
 dim inp, encode
 inp = "choiankyu"
 encode = base64Encode(inp)
response.write " 문자열 = choiankyu " &nl
response.write " Encoded value = " & encode &nl
response.write " Decoded value = " & base64Decode(encode) &nl
 %>
 

 


  '/////////////////////////////////////////////////
  '/// 어떤분이 외국소스에서 구해 인터넷에 올려놓은 소스입니다.
  '/// 쿠키에 많이 사용하더군요.
  '/////////////////////////////////////////////////


  OPTION EXPLICIT
  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 = "&lt;P&gt;" & 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

   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




  PUBLIC FUNCTION base64Decode(scrambled)

   if len(scrambled) = 0 then
      base64Decode = ""
      exit function
   end if

   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
   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


※ 혹시 도움이 되셨다면 댓글에 한마디 남겨주세요!
작성자   비밀번호
자동글 방지     (자동글 방지 기능입니다.)
내용   댓글달기 
이메일 문의 : cak0280@nate.com  
Copyright 2000 By ENTERSOFT.KR All Rights Reserved.