Sql server 2005 SQLServer2005加密触发器
我有一个成功加密信用卡的脚本。我需要它作为一个触发器工作,这样对creditcard列进行的任何插入都会自动加密它。现在,我的触发器工作,但creditcard列是一个varchar。当应用程序尝试插入时,我会执行以下操作: DECLARE @encryptedCreditCardNumber varbinary(max) SET @encryptedCreditCardNumber = EncryptByKey(Key_GUID('testKey'), @CreditCardNumber)); 声明@encryptedCreditCardNumber varbinary(最大值) 设置@encryptedCreditCardNumber=EncryptByKey(Key_GUID('testKey'),@CreditCardNumber)); 这很好,但是如何将varbinary(max)转换为varchar(这就是信用卡列)。creditcard列在我的公司已经有很长一段时间是一个varchar,很多遗留代码都依赖于它是一个varcharSql server 2005 SQLServer2005加密触发器,sql-server-2005,encryption,types,Sql Server 2005,Encryption,Types,我有一个成功加密信用卡的脚本。我需要它作为一个触发器工作,这样对creditcard列进行的任何插入都会自动加密它。现在,我的触发器工作,但creditcard列是一个varchar。当应用程序尝试插入时,我会执行以下操作: DECLARE @encryptedCreditCardNumber varbinary(max) SET @encryptedCreditCardNumber = EncryptByKey(Key_GUID('testKey'), @CreditCardNumber));
谢谢最简单的方法是将二进制文件转换为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)');
编辑:有用的参考-