본문 바로가기

프로그래밍/MSSQL 정리필요

[DB_MSSQL] PWDENCRYPT, PWDCOMPARE, HASHBYTES (암호화)

반응형

데이터를 암호화해보자



1. PWDENCRYPT


암호화


PWDENCRYPT('암호화할 문자')



암호비교

SELECT PWDCOMPARE('비교 대상 문자', '암호화된 Hash값')



PWDENCRYPT는 단방향 암호화 방식의 함수로 복호화가 되지 않는 함수다.
또한, 동일한 문자임에도 불구하고 새로운 Hash값을 제공한다.

SELECT PWDENCRYPT('123')


즉, 위의 쿼리를 실행해서 결과를 보면 실행할때 마다 매번 다른 결과의 Hash값을 볼 수 있다.
그렇다면, '123'이라는 문자와 '123'이 암호화된 데이터와 동일한지 어떻게 알 수 있을까? 이때 사용하는 함수가 바로 PWDCOMPARE다.





  예제


PWDENCRYPT 함수를 이용하여, 123이라는 문자를 암호화해보자

DECLARE @pwd VARBINARY(MAX);
SET @pwd = PWDENCRYPT('123');
 
SELECT @pwd

@pwd는 다음과 같이 암호화된 문자열로 나오게 된다.

▶0x0200A40C6793E359E5EA06D8A3FB8C5CBF103B389D4C01559525886C81A73A1824B2B6D19735A626303EB2F0008E1CA1EBEC80E2ABA77BE8A82AD1F5085BC8706F86DD5A3DDB



※ 주의
HashBytes 함수의 반환값은 이진수이기 때문에 VARBINARY를 사용해야 한다.




그렇다면, 저 암호화된 문자열이 123이 암호화된 값이 맞는지 확인해보는 방법은?
위의 설명한바와 같이 PWDCOMPARE 함수를 이용해서 비교해보면 된다.

DECLARE @pwd VARBINARY(MAX);
SET @pwd = PWDENCRYPT('123');
 
SELECT PWDCOMPARE('123', @pwd)
SELECT PWDCOMPARE('12345', @pwd)

먼저 @pwd라는 변수를 설정 후 123 문자를 암호화한 값으로 설정해준다.

그 후 PWDCOMPARE 함수를 이용하여 암호화된 문자와 비교 대상 문자가 동일한지 확인해보자.


▶ 첫번째 결과는 1이 나오고, 두번째 결과는 0이 나오게된다.
1은 true123과 @pwd의 값이 동일함을 의미하고,
0는 false12345와 @pwd의 값이 동일하지 않음을 의미한다.





2. HASHBYTES


HASHBYTES('암호화알고리즘', '암호화할 문자')


암호화알고리즘은 다음과 같다.
MD2, MD4, MD5, SHA, SHA1, SHA2_256, SHA2_512

PWDENCRYPT와는 다르게 HASHBYTES는 매번 새로운 Hash값이 아닌 동일한 Hash을 반환한다.
그렇기 때문에 PWDCOMPARE와 같은 암호비교 함수를 사용하지 않아도 된다.





  예제



SELECT HASHBYTES('SHA2_512', '123')


▶ 0x3C9909AFEC25354D551DAE21590BB26E38D53F2173B8D3DC3EEE4C047E7AB1C1EB8B85103E3BE7BA613B31BB5C9C36214DC9F14A42FD7A2FDB84856BCA5C44C2




DECLARE @pwd VARBINARY(MAX);
SET @pwd = HASHBYTES('SHA2_512', '123')
 
IF (@pwd = HASHBYTES('SHA2_512', '123'))
    SELECT 1
ELSE
    SELECT 0

▶ 1 (true)

반응형