태그 : 암호화복호화

MSSQL 에서 암호화 하기 1, 2

1. (MySQL 에서 password() 처럼 쓸수 있는 방법
물론 복호화는 불가능하다.

/* 암호화 함수 */
SELECT PwdEncrypt('TESTDATA')
-----------------------------------
-- 결과 : 0x0100B10AD5EF78506BAB878F63BE525BBF501A409E2AA4DBFCEC

/*  확인 함수 */
-- SQL :
SELECT PwdCompare('TESTDATA', PwdEncrypt('TESTDATA'))
------------------------------------------------------------
-- 결과 : 1

-- SQL :
SELECT PwdCompare('TESTDATA', PwdEncrypt('TESTDATA1'))
------------------------------------------------------------
-- 결과 : 0

 


2. 마스터 키 생성 -> 비대칭 키 생성 -> 대칭 키 생성

create master key encryption by password='패스워드'
create asymmetric key asym_encryption_test with algorithm = rsa_1024
create symmetric key sym_encryption_test with algorithm = des encryption by asymmetric key asym_encryption_test

 

일반적으로 위와 같이 생성한다...

 

마스터키를 만들고, 비대칭키를 RSA_1024 알고리즘으로 생성하고,
대칭키를 앞에 만들어 둔 비대칭키를 암호로 하여 DES 알고리즘으로 로 생성한다.


그러나... 또라이 사장을 둔 가난한 회사의 불쌍한 개발자에게는 웹 호스팅 등등 여러가지 상황을 염려에 두어야 하므로...

DB 백업이나, 기타 등등 문제가 생겼을 경우, 복원해도 기존 암호를 복호화를 할 수 있는 키를 생성 할 수 없다.


모든 키를 패스워드로 생성하자.
create master key encryption by password='패스워드'
create asymmetric key asym_encryption_test with algorithm = rsa_1024 ENCRYPTION BY PASSWORD = '패스워드'

create symmetric key sym_encryption_test with algorithm = des  encryption by password = '패스워드'

 

하다보니 드는 생각...
대칭키를 패스워드로 생성하면... 비대칭키는 생성 안해도 되는거 아닌가???
모르겠다.. 귀찮다...


키를 생성했으면 열자


open symmetric key sym_encryption_test
decryption by asymmetric key asym_encryption_test

이것은 세션동안 유지 된다.

 

처음 방법대로 했으면 이렇게 열고...

패스워드를 썼으니
open symmetric key sym_encryption_test
decryption by password='패스워드'


암호화 :

EncryptByKey(Key_GUID('sym_encryption_test'), '암호화 할 문자열');

복호화 :
convert(varchar, DecryptByKey('암호화된 문자열))

생성되는 암호화 문자열이 들어갈 컬럼은 varbinary(128) 정도로 해 준다.

 

select *, gayalabor.dec(encrypted) from gayalabor.temp

 


두대의 서버에서 백업 - 복원 후 패스워드로 키를 생성해 준 후 열어 보았다.

동일한 해쉬(?)값을 갖는 키가 생성되었다.

 

퇴근하자!

by TheProdigy | 2009/04/21 09:21 | ASPX MSSQL VS | 트랙백 | 덧글(0)

◀ 이전 페이지          다음 페이지 ▶