MS-SQL에서 내부적으로 지원하는 문서화되지 않은 문자열 함수인 PWDENCRYPT와 PWDCOMPARE를 통해 암호화 기능을 구현할수 있다.
<사용예제>
' 테이블을 생성한다, 암호화할 컬럼은 VARBINARY 타입으로 한다. CREATE TABLE MEMBER ' 데이터를 입력한다. 암호화할 컬럼은 PWDENCRYPT메소드를 이용해서 넣는다. INSERT INTO MEMBER (UserId, UserPwd) VALUES ('ssey', PWDENCRYPT('seyoung'))
' 해당아이디를 가진 회원의 암호화된 비밀번호 컬럼과 입력한 문자열 비밀번호를 ' PWDCOMPARE(입력문자열, 컬럼명) 메소드를 이용해 비교한다. ' 둘이 같으면 1 (true), 틀리면 0 (false)를 리턴하게 된다. ' 그리고 원문이나 암호문 둘 중 하나가 NULL 이면 NULL을 리턴하게 된다. SELECT PWDCOMPARE('SEYOUNG', UserPwd) FROM MEMBER WHERE UserId='ssey' ' 결과 : 1
결과를 살펴보면 대소문자는 구분하지 않음을 알 수 있다. 암호문의 경우 위에서 살펴본대로 대소문자를 분명 다르게 비교하였으나, PWDCOMPARE 함수에서는 대소문자를 무시하였다. 또한, 실행 결과를 보면 형태는 원문의 길이에 상관없이 30~35자 사이의 거의 일정한 길이의 암호문을 출력하는 것을 볼 수 있다. 테스트 결과 원문의 길이가 varchar 기준으로 128자를 넘었을 경우 에러를 발생 하였다.
|
===========================================================================
암호화
update users set LoginPwd=pwdencrypt('passwd12') where id=3
DECLARE @ClearPIN varchar(255)
DECLARE @EncryptedPIN2 varchar(255)
DECLARE @EncryptedPIN varbinary(255)
SELECT @ClearPIN = 'passwd12'
SELECT @EncryptedPIN2 = LoginPwd from users where id=3
SELECT @EncryptedPIN = CONVERT(varbinary(255), @EncryptedPIN2)
SELECT pwdcompare(@ClearPIN, @EncryptedPIN, 0)
암호가 맞으면 1을 리턴
틀리면 0 리턴
===========================================================================
DECLARE @inputPd varchar(12)
DECLARE @inputID varchar(12)
set @inputPd='11111' --> 입력받은 암호
set @inputid='m57hyun' --> 입력받은 회원아이디
SELECT PWDCOMPARE( @inputPd , encPassword , 0 ) AS encCompare
From tbl_mem_main2 --> 회원테이블
where c_mem_id=@inputid
결과는 0,1로 표현되며 0일경우는 불일치
1인 경우는 일치입니다.
[출처] 민주가인
"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기, 각종 광고, 영업, 판매, 제안서, 전단지 반응율 3배×10배 이상 높이는 마법의 8단계 공식" |
☞자세히보기 |
|
|