SQL Server 2005加密触发器

SQL Server 2005加密触发器

问题描述:

我有一个成功加密信用卡的脚本。我需要它作为触发器,以便对信用卡列进行的任何插入操作都会自动对其进行加密。现在,我的触发器工作,但信用卡列是一个varchar。当应用程序试图插入,我这样做:SQL Server 2005加密触发器

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

这工作正常,但我怎么那么VARBINARY(最大)转换为VARCHAR(这是信用卡列是什么)。信用卡列在我的公司很长一段时间都是varchar,很多遗留代码依赖它作为varchar。

谢谢

你的最简单的方法将是二进制转换为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