CAPICOM.dll을 이용한 Classic ASP(VBScript)에서 MD5 암호화 적용하기
무슨 일이든 알고나면 참 어이없거나 너무 간단하지만 알기 전까지 그 고생은 말도 못합니다.
DB단에서 암호화하기도 하고 그냥 스크립트로 처리하기도 하겠지만
검색에 검색을 거듭해도 정확하게 암호화처리하기가 쉽지 않더군요.
보통은 뭐 Plain text로 DB에 넣는 경우도 많지만
어쩌다 다른 서버에 연동시킨다거나 하는 경우 그쪽에 저장된 비밀번호 등이 MD5 인코딩되어 있다면
이쪽 서버에서도 같은 방식으로 인코딩시켜 서로 결과값이 같은지 다른지 비교해 보는 방법으로 처리할 수 있겠지요.
검색해보면 단순히 스크립트로 만든 MD5 인코딩 함수가 나오긴 하지만 아무래도 퍼포먼스나 관리 측면에서는 COM Object로 등록시켜놓고 사용하는 편이 유리하지 않겠나 싶습니다.
CAPICOM.dll 파일은 조금만 검색해 보면 믿을만한 곳(뭐, MS site이겠죠)에서 다운로드를 하면 됩니다.
만사 귀찮다면 여기서...
command 창에서
regsvr32 CAPICOM.dll
요렇게 하면 쉽게 서비스에 올릴수 있으니 넘어가구요.
이렇게 등록된 CAPICOM.
msdn 검색된 내용과 함께 정리해보자면...
dim cp
set cp = Server.CreateObject("CAPICOM.HashedData")
cp.Algorithm = 3
cp.Hash Ustr2Bstr(strString) 'Unicode string -> Byte String Conversion
MD5 = cp.Value
set cp = nothing
end function
function UStr2Bstr(UStr)
'Unicode string to Byte string conversion
Dim lngLoop
Dim strChar
dim strResult
strResult = ""
For lngLoop = 1 to Len(UStr)
strChar = Mid(UStr, lngLoop, 1)
strResult = strResult & ChrB(AscB(strChar))
Next
UStr2Bstr = strResult
end function
이렇게 함수로 사용할 수 있습니다.
CAPICOM에서 MD5 알고리즘을 적용하기 위한 프로퍼티가 3
CAPICOM.HashedData의 MD5 Hash 결과값을 다시 Byte string으로 변환해 줘야합니다.
이렇게 나온 결과값을 MD5 encoder로 만든 값과 비교해보니 잘 되는군요.
md5("123456") = e10adc3949ba59abbe56e057f20f883e
md5("abcd") = e2fc714c4727ee9395f324cd2e7f331f
원하는 알고리즘에 따라 아래 상수를 적용하면 됩니다.
Const CAPICOM_HASH_ALGORITHM_SHA1 = 0
Const CAPICOM_HASH_ALGORITHM_MD2 = 1
Const CAPICOM_HASH_ALGORITHM_MD4 = 2
Const CAPICOM_HASH_ALGORITHM_MD5 = 3
Const CAPICOM_HASH_ALGORITHM_SHA256 = 4
Const CAPICOM_HASH_ALGORITHM_SHA384 = 5
Const CAPICOM_HASH_ALGORITHM_SHA512 = 6
SHA 256, 384, 512는 CAPICOM 2.0.0.3 이전 버전이나 Windows XP, Windows 2000 에서는 지원하지 않는다고 합니다.... 만 이런거 쓸일이 잘 있을까요?
참고로, Base64 encoding 이나 decoding 해야하는 경우
strEncoded = cp.Base64Encode(strString)
strDecoded = cp.Base64Decode(strString)
set cp = nothing
위와 같이 사용할 수 있습니다.
한글이 들어있는 HTML 코드 역시 정확하게 인코딩, 디코딩 됩니다.
한글 지원 안되는 함수 찾아쓰다 헤매던 기억이 나서.... (하루종일 찾고 테스트하고 하니 짜증 이빠이~)