Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 存储在Varchar中的值无法从SQL Server获取十六进制值_Sql Server_Encryption_Sql Server 2008 R2 - Fatal编程技术网

Sql server 存储在Varchar中的值无法从SQL Server获取十六进制值

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

Im使用SQLServer2008R2

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

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