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