Sql server 存储在Varchar中的值无法从SQL Server获取十六进制值
Im使用SQLServer2008R2 有一个包含varchar字段的表。我们有一些第三方软件写入我们的数据库。我们无法控制它如何写入。我们需要对一些数据进行加密,以便工具加密它必须写入varchar或类似文本字段的数据。在与供应商交谈后,我们发现他们正在设置字段,执行类似的操作Sql server 存储在Varchar中的值无法从SQL Server获取十六进制值,sql-server,encryption,sql-server-2008-r2,Sql Server,Encryption,Sql Server 2008 R2,Im使用SQLServer2008R2 有一个包含varchar字段的表。我们有一些第三方软件写入我们的数据库。我们无法控制它如何写入。我们需要对一些数据进行加密,以便工具加密它必须写入varchar或类似文本字段的数据。在与供应商交谈后,我们发现他们正在设置字段,执行类似的操作 update <table> Set <varchar_field> = ENCRYPTBYPASSPHRASE(N'<passphrase>', '<clear_text&g
update <table>
Set <varchar_field> = ENCRYPTBYPASSPHRASE(N'<passphrase>', '<clear_text>')
Where <some_condition>
EncryptBysphase返回一个VarBinary值。因此,varbinary值被设置到varchar字段中。当我查看数据库时,该字段似乎为空,但如果我运行
SELECT
Cast(DECRYPTBYPASSPHRASE(N'<passphrase>', <varchar_field>) AS NVARCHAR)
From <table>
我得到了原值
我的问题是,我想知道加密值在十六进制形式下是什么样子。我似乎不知道怎么做
我试过了
Cast(<varchar_field> as varchar)
及
它们都返回了实际包含某些内容的空值。
我想看到类似0x0103939FFA0293的东西。十六进制是存储在varchar字段中的加密值的二进制
更新答案
我试过的是
Convert(varchar, <varchar_field>)
我认为我需要将实际的二进制值转换为varchar,但我需要做的是将varchar转换为varbinary。转换为varbinary似乎已经满足了我的需要
Convert(varbinary, <varchar_field>)
你为什么要混合VARCHAR和NVARCHAR
要将二进制值视为字符串,需要使用样式1:
DECLARE @y VARBINARY(8000);
SELECT @y = ENCRYPTBYPASSPHRASE(N'hello there', N'secret');
SELECT AsBinary = @y, AsString = CONVERT(NVARCHAR(4000), @y, 1);
如果你说的是对NVARCHAR的转换,我不知道第三部分工具在做什么,但是如果我转换到VARCHAR,我会得到一些wierd汉字符号,如果我转换到NVARCHAR,我会得到原始值。我认为这与解密函数有关,而不是与字段中存储的内容有关。但我实际上不得不转换成VARBINARY而不是varchar,有趣的是,当我这样做时,情况正好相反:nvarchar输出一些中文/亚洲象形文字,而varchar输出我的英文文本。
DECLARE @y VARBINARY(8000);
SELECT @y = ENCRYPTBYPASSPHRASE(N'hello there', N'secret');
SELECT AsBinary = @y, AsString = CONVERT(NVARCHAR(4000), @y, 1);