-
[SQL Server] 단방향 암호화 함수 HASHBYTES 사용 시 유의사항DB & SQL 2022. 2. 9. 22:35반응형
주로 로그인 암호를 저장할때, 단방향으로 암호화시켜 저장하고, 로그인시 입력받은 값을 암호화시킨 코드로 변환하여 저장된 암호화코드와 일치할때 정상적인 비밀번호를 입력했다고 가정하고 로그인시켜주게 만드는데, 이때 유용하게 쓰이는 함수가 HASHBYTES 이다.
그런데 해당 함수를 사용할때 유의해야 할 점이 있다. 입력받는 암호의 타입에 따라 HASH 함수의 결과가 다르다는 점이다.
아래 케이스는 @pw 란 변수에 "password"라는 암호평문을 입력한 후, HASHBYTES로 암호화시킨 결과이다.
DECLARE @pw varchar(20) = 'password' SELECT HASHBYTES('SHA2_256', @pw) -- 결과 : 0x5E884898DA28047151D0E56F8DC6292773603D0D6AABBDD62A11EF721D1542D8
이번엔 @pw 변수를 nvarchar로 바꾼 뒤 실행해보자. 결과가 다른것을 확인할 수 있다.
DECLARE @pw nvarchar(20) = 'password' SELECT HASHBYTES('SHA2_256', @pw) -- 결과 : 0xE201065D0554652615C320C00A1D5BC8EDCA469D72C2790E24152D0C1E2B6189
C# 코드의 경우 Encoding 에 따라 차이가 있다. UTF8의 경우 varchar 타입과 동일하며, Unicode(=UTF16)은 nvarchar일때와 동일한 결과를 갖는다. 편의상 Hex String으로 표시하도록 작성했다.
반응형'DB & SQL' 카테고리의 다른 글
[Postgresql] tsquery, tsvector를 이용한 텍스트 검색 (0) 2023.07.11 [SQL Server] 테이블이나 프로시저 생성 후 SSMS에 오류로 표기되는 부분 손쉽게 Refresh 하기 (0) 2022.12.21 [Query] (만)나이 구하기 (3) 2021.02.17 [SQL Server] ODBC를 통한 Linked Server 사용시 주의사항 (0) 2017.05.23 [MySQL] 원격지에서 root로 로그인하기 (0) 2015.01.06