2008-10-02 6 views
0

신용 카드를 성공적으로 암호화하는 스크립트가 있습니다. 방아쇠로 작동해야하므로 신용 카드 열의 모든 삽입물이 자동으로 암호화됩니다. 지금 방아쇠가 작동하지만 신용 카드 열은 varchar입니다. 응용 프로그램 삽입하려고 할 때, 나는 이렇게 : 잘 작동하지만 그때 (신용 카드 열이 바로 이것이다)을 VARCHAR로 VARBINARY (최대)로 변환 어떻게SQL Server 2005 암호화 트리거

 
DECLARE @encryptedCreditCardNumber varbinary(max) 
SET @encryptedCreditCardNumber = EncryptByKey(Key_GUID('testKey'), @CreditCardNumber)); 

. 신용 카드 열은 내 회사에서 오래 동안 varchar 였고 많은 레거시 코드는 varchar에 의존합니다.

답변

1

귀하의 간단한 방법은 varchar 열에서 그 64 기수로 바이너리 변환 및 저장 될 것입니다 감사합니다. Base64는 ascii 인코딩을 사용하여 이진 데이터를 렌더링하여 XML과 같은 형식으로 표현할 수있는 방법입니다.

select cast(N'' as xml).value('xs:base64Binary(xs:hexBinary(sql:variable("@encryptedCreditCardNumber")))', 'varchar(max)'); 

이 작업은 XML 중개자를 통해 varbinary를 varchar로 올바르게 인코딩합니다. DB를 사용에 대한 과정을 역으로 :

select cast(N'' as xml).value('xs:base64Binary(sql:variable("@base64stringvariable"))', 'varbinary(20)'); 

편집을 : 유용한 참조 - http://blogs.msdn.com/sqltips/archive/2008/06/30/converting-from-base64-to-varbinary-and-vice-versa.aspx