안녕하세요
마푸입니다.
오늘은 결혼식을 다녀와서 몸이 많이 피곤하네요 ㅋ;
1일 1회 이상 블로그 포스트를 다짐한터라 포스트를 작성하러구 이것저것 뒤져봤는데
마침 예전에 정리했던 자료 중에 재미 있는게 있어 옮겨 적어 보려합니다.
MySQL에서는 password()라는 문자열 함수가 있습니다.
단방향성 암호라서 보호화가 안되지요...
그러나 오픈소스의 한계로 암호화하는 방식이 공개되어있어서 디코딩이 가능합니다.
(* 암호화 방식이 지금은 기억이 안나네요 ㅋ;; 한참 공부할때는 외웠었는데 ㅁ...ㅠ.ㅠ)
어쨋든 MSSQL에도 이것과 비슷한 함수가 있습니다. hashbytes 함수인데요
이것과 관련해서 예전에 정리한 글을 올려보겠습니다.
-- HashBYTES 함수를 이용한 암호화
장점 :
1. 암호화를 위해 키 또는 인증서가 필요하지 않는다.
2. 복호화 방법이 제공되지 않는다 (단방향암호화)
3. 암호화된 열에 인덱스를 생성해 성능 효과를 볼 수 있다.
4. 위와 같은 차이점과 함께 사용하는 방법도 다소 차이가 있다.
HASHBYTES는 16진수로 변경하기 때문에 0x로 시작합니다.
이부분을 제거 하기위해서는 CONVERT(VARCHAR,@VARBINARY,2)를 이용해서 앞부분을 제거 할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | use AdventureWorks2012 GO -- 기존에 테이블이 있다면 삭제합니다. IF OBJECT_ID ('dbo.EmpTest') is not null DROP TABLE dbo.EmpTest GO -- 테이블 생성 SELECT BusinessEntityID, LoginID, JobTitle , BirthDate, HireDate, VacationHours INTO dbo. EmpTest FROM HumanResources. Employee GO -- 암호화에 사용될 열을 추가합니다. ALTER TABLE dbo. EmpTest ADD hashedLoginID varbinary(256 ) GO -- 새로운 열에 암호화 된 데이터를 저장합니다. UPDATE dbo. EmpTest SET HashedLoginID = HASHBYTEs ('SHA1', LoginID) GO -- 암호화 대상 열 제거 ALTER TABLE dbo.EmpTest DROP COLUMN LoginID GO -- 데이터 확인 -- HASHBYTES는 VARBinary를 리턴하기 때문에 VARCHAR로 리턴하면 깨져보입니다. SELECT CONVERT (varchar, HashedLoginID) AS 'Decoding' ---> 헐 ;;; 완전 깨져보임 FROM dbo. EmpTest -- 검색하기 (이게 머얏... 원래 값을 암호화해서 tur / false를 체크함 Mysql Password() 함수와 비슷하구먼.... SELECT BusinessEntityID, JobTitle, BirthDate , HireDate FROM dbo. EmpTest WHERE BusinessEntityID = 1 AND HashedLoginID = Hashbytes ('SHA1', N'adventure-works\ken0') GO -- 테이블 제거 DROP TABLE dbo.EmpTest | cs |
반응형
'Database' 카테고리의 다른 글
[MySQL] warning (경고) 메시지를 출력하자 (0) | 2017.02.27 |
---|---|
[MSSQL] 재귀 CTE를 이용한 계층구조 조회하기 (0) | 2017.02.26 |
[MSSQL] temp DB설정 (0) | 2017.02.22 |
[MSSQL] Merge join에 대한 고찰 (0) | 2017.02.22 |
[MySQL] show processlist 모니터링 하기 (0) | 2017.02.22 |