SQL Server 2005加密触发器

时间:2020-03-06 15:01:58  来源:igfitidea点击:

我有一个可以成功加密信用卡的脚本。我需要它作为触发器,以便对信用卡列进行的任何插入都会自动对其进行加密。现在,我的触发器起作用了,但是creditcard列是varchar。当应用尝试插入时,我这样做:

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

效果很好,但是接下来我该如何将varbinary(max)转换为varchar(这就是"信用卡"列)。长期以来,我公司的creditcard列一直是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。要在数据库上撤消该过程,请使用:

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