Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 SQLServer2005加密触发器_Sql Server 2005_Encryption_Types - Fatal编程技术网

Sql server 2005 SQLServer2005加密触发器

Sql 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));

我有一个成功加密信用卡的脚本。我需要它作为一个触发器工作,这样对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,很多遗留代码都依赖于它是一个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)');
编辑:有用的参考-