我正在使用 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>)