Create Table test01(name varchar(10), hphone varbinary(255));
insert into test01(name, hphone) values ('홍길동', ENCRYPTBYPASSPHRASE('pass','010-1234-5678'))
insert into test01(name, hphone) values ('홍길순', ENCRYPTBYPASSPHRASE('pass','010-1234-7777'))
insert into test01(name, hphone) values ('설현', ENCRYPTBYPASSPHRASE('pass','010-1234-8888'))
--확인
select CONVERT(VARCHAR(MAX), DECRYPTBYPASSPHRASE('pass',hphone)) as hphone from test01
--설현을 검색하고 싶습니다.
--hphone 이 varbinary 로 된건 어떻게 검색해야 하나요.?
select * from test01 where hphone like ???
감사합니다.
Comment 6
-
샤오린
2015.07.14 15:42
select * from test01where CONVERT(VARCHAR(MAX), DECRYPTBYPASSPHRASE('pass',hphone)) = '010-1234-8888'varbinary 를 다시 varchar 로 변경해서 검색하시면 됩니다. -
SELECT ENCRYPTBYPASSPHRASE('PASS','010-1234-5678')GOSELECT ENCRYPTBYPASSPHRASE('PASS','010-1234-5678')--------------------------------------------------------------------------0x0100000087E7EF24160C92C5EB81F537B29F9B4A2F9425C47CF14267D5A6A40B3F107325(1개 행이 영향을 받음)--------------------------------------------------------------------------0x010000002919B82339444CD9460DA27073BE680BC0374AEC7CD64254CF6EE5AD3D715275(1개 행이 영향을 받음)암호화 할때마다 매번 다른 값이 나옵니다.복호화해서 검색해야죠.그래서 인덱스도 못겁니다.(편법은 있습니다만...)
-
희망나라
2015.07.14 17:07
샤오린님, 초짜해커님 답변감사드립니다.
초짜해커님 답변처럼 Row가 5000개라고 가정했을때 매번 복호화해서 검색해야 하기에
혹시 다른방법이 없을까 하고 고민하다 질문드렸습니다.결국은 복호화 방법밖에 없나 봅니다.
두분 감사드립니다.
-
minsouk
2015.07.15 02:37
암호화 대상값에서 적당히 잘라 [앞에서 뒤에서 카디널리티 생각해서] 체크섬을 만들어 컬럼으로 저장합니다 이후 그 체크섬으로 인덱스를 이용해 조회하고 중복된 한개이상의 결과를 대상으로 진짜 암호를 복호화해 검사하면 컴퓨팅 리소스도 줄이고 정보안법도 문제없고 좋을듯 한데요 ^^ -
희망나라
2015.07.15 10:38
minsouk 님 글 감사드립니다.
<<암호화 대상값에서 적당히 잘라 [앞에서 뒤에서 카디널리티 생각해서] 체크섬을 만들어 컬럼으로 저장합니다>>
암호화 대상값에서 잘라온 값이라 모든 Row의 체크섬 필드을 복호화해서 비교해야 되는것 아닌가요.?
죄송하지만 조금만 더 설명해 주시면..
-
minsouk
2015.07.15 12:10
1. 한번은 모두 복호화 해서 원래값을 찾아야 합니다.
2. 전화번호라면 뒷 4자리를 substring 해 checksum 값을 만들어 다른 필드에 추가 합니다.
3. checksum 필드에 인덱스를 겁니다.
4. 뒷 4자리를 입력받아 해당값의 체크섬 값을 구해 2번에서 입력한 필드에서 검색 합니다.
5. 전화 번호 뒷 4자리가 중복된 여러 전체 전화번로를 subset 으로 가질 수 있습니다.
6. 해당 subset 의 전체 전화번호를 모두 복호화해 비교합니다.
7 컴퓨팅 파워가 약 1/9999 로 줄어들고 속도도 빨라지지 않을까요?