본문 바로가기
개발노트

[암호화]DB접속정보 암호화하기3(BASE64)

by SoonNote 2024. 3. 5.
반응형

 

 

 

유지보수 중인 프로젝트들의 DB접속정보 암호화 요청으로 인하여 전자정부 3.8이상의 버전은 crypto 간소화서비스를, 3.7이하 버전에는 AES방법, ASP는 base64방식을 사용하여 암호화를 하였다.

 

첫번째 방식인 crypto방식

 

[암호화]DB접속정보 암호화하기1(crypto)

유지보수 중인 프로젝트들의 DB접속정보 암호화 요청으로 인하여 전자정부 3.8이상의 버전은 crypto 간소화서비스를, 3.7이하 버전에는 AES방법, ASP는 base64방식을 사용하여 암호화를 하였다. 첫번째

soondevnote.tistory.com

 

두번째 방식인 AES방식

 

[암호화]DB접속정보 암호화하기2(AES)

유지보수 중인 프로젝트들의 DB접속정보 암호화 요청으로 인하여 전자정부 3.8이상의 버전은 crypto 간소화서비스를, 3.7이하 버전에는 AES방법, ASP는 base64방식을 사용하여 암호화를 하였다. 첫번째

soondevnote.tistory.com

 

세번째로는 ASP에서 사용한 BASE64 방식이다

 

1.cmmBaseDb.asp 추가

<%
	'/////////////////////////////////////////////////
	'/// 어떤분이 외국소스에서 구해 인터넷에 올려놓은 소스입니다.
	'/// 쿠키에 많이 사용하더군요.
	'/////////////////////////////////////////////////
'	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 = "<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

	dim inp, pnp

'	inp = "username"
'	pnp = "password"

'	Response.write base64Encode(inp) & "<br/>"
'	Response.write base64Encode(pnp) & "<br/>"

'	Response.write base64Decode(base64Encode(inp)) & "<br/>"
'	Response.write base64Decode(base64Encode(pnp)) & "<br/>"
	

%>

 

코드 제일 하단에 Encode를 통하여 DB접속정보 를 암호화한다.

 

 

 

2. globals.asp 추가

Const db_user	= "암호화username"				'// db 로그인 계정
Const db_passwd = "암호화password"				'// db 로그인 암호
Const db_source = "127.0.0.1, 1433"				'// db ip
Const db_name	= "dbName"				'// db 이름

1번 작업에서 암호화된 값들을 입력한다.

 

 

3. 1번 asp파일의 base64Decode를 사용하여 디코드하여 연결한다.

 

 

 

 

crypto암호화방법 확인하기

 

[암호화]DB접속정보 암호화하기1(crypto)

유지보수 중인 프로젝트들의 DB접속정보 암호화 요청으로 인하여 전자정부 3.8이상의 버전은 crypto 간소화서비스를, 3.7이하 버전에는 AES방법, ASP는 base64방식을 사용하여 암호화를 하였다. 첫번째

soondevnote.tistory.com

 

AES암호화방법 확인하기

 

[암호화]DB접속정보 암호화하기2(AES)

유지보수 중인 프로젝트들의 DB접속정보 암호화 요청으로 인하여 전자정부 3.8이상의 버전은 crypto 간소화서비스를, 3.7이하 버전에는 AES방법, ASP는 base64방식을 사용하여 암호화를 하였다. 첫번째

soondevnote.tistory.com

 

반응형