2

我正在使用 SQLServer 2008 R2

有一个包含 varchar 字段的表。我们有一些第三方软件可以写入我们的数据库。我们无法控制它如何写入它。我们需要对一些数据进行加密,以便该工具加密它必须写入 varchar 或类似文本字段的数据。在与供应商交谈后,我们发现他们正在设置现场做这样的事情

update <table>
Set <varchar_field> = ENCRYPTBYPASSPHRASE(N'<passphrase>', '<clear_text>')
Where <some_condition>

ENCRYPTBYPASSPHRASE 返回 VarBinary 值。因此,将 varbinary 值设置为 varchar 字段。当我查看数据库时,它看起来好像该字段为空白但如果我运行。

SELECT
Cast(DECRYPTBYPASSPHRASE(N'<passphrase>', <varchar_field>)  AS NVARCHAR)
From <table>

我取回原来的值。

我的问题是我想知道十六进制形式的加密值是什么样的。我似乎无法弄清楚该怎么做。

我试过了

Cast(<varchar_field> as varchar)

Convert(varchar, <varchar_field>)

他们都带着空的看起来实际上包含一些东西的价值回来了。我想看到像 0x0103939FFA0293 这样的东西。十六进制,即存储在 varchar 字段中的加密值的二进制文件。

更新答案

我试过的是

Convert(varchar, <varchar_field>)

认为我需要将真正的二进制值转换为 varchar,但我需要做的是将 varchar 转换为 varbinary。转换为 varbinary 似乎让我得到了我需要的东西。

Convert(varbinary, <varchar_field>)
4

1 回答 1

1
  1. 总是,总是,总是用EXPLICIT LENGTH定义可变长度数据类型

  2. 你为什么混合VARCHARNVARCHAR

  3. 要将二进制值视为字符串,您需要使用样式 1:

     DECLARE @y VARBINARY(8000);
    
     SELECT @y = ENCRYPTBYPASSPHRASE(N'hello there', N'secret');
    
     SELECT AsBinary = @y, AsString = CONVERT(NVARCHAR(4000), @y, 1);
    
于 2013-08-20T18:33:39.547 回答