【问题标题】:SQL Server 2005 encryption triggerSQL Server 2005 加密触发器
【发布时间】:2010-09-14 20:14:34
【问题描述】:

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

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

这很好,但是我如何将 varbinary(max) 转换为 varchar(这是信用卡列的内容)。在我的公司,信用卡列长期以来一直是 varchar,许多遗留代码都依赖于它是 varchar。

谢谢

【问题讨论】:

    标签: sql-server-2005 encryption types


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 1970-01-01
      • 2013-05-25
      • 2013-09-22
      • 1970-01-01
      • 2014-10-09
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多