2008-10-02 110 views
0

我有一個成功加密信用卡的腳本。我需要它作爲觸發器,以便對信用卡列進行的任何插入操作都會自動對其進行加密。現在,我的觸發器工作,但信用卡列是一個varchar。當應用程序試圖插入,我這樣做:SQL Server 2005加密觸發器

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

這工作正常,但我怎麼那麼VARBINARY(最大)轉換爲VARCHAR(這是信用卡列是什麼)。信用卡列在我的公司很長一段時間都是varchar,很多遺留代碼依賴它作爲varchar。

謝謝

回答

1

你的最簡單的方法將是二進制轉換爲Base64並存儲在VARCHAR列。 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