gpt4 book ai didi

sql-server - 存储在 Varchar 中的 ENCRYPTBYPASSPHRASE 值无法获取十六进制值 SQL Server

转载 作者:行者123 更新时间:2023-12-05 06:46:07 27 4
gpt4 key购买 nike

我正在使用 SQLServer 2008 R2

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

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

最佳答案

  1. ALWAYS, ALWAYS, ALWAYS define variable-length data types WITH AN 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);

关于sql-server - 存储在 Varchar 中的 ENCRYPTBYPASSPHRASE 值无法获取十六进制值 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18341516/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com