我「米使用的SQLServer 2008 R2ENCRYPTBYPASSPHRASE價值不能得到十六進制值的SQL Server
,其中包含有一個varchar字段的表。我們必須寫入到我們的數據庫的一些第三方軟件。我們我們需要對一些數據進行加密,以便工具對要寫入varchar或類似文本字段的數據進行加密。在與供應商交談之後,我們發現他們正在設置字段做這樣的事情
update <table>
Set <varchar_field> = ENCRYPTBYPASSPHRASE(N'<passphrase>', '<clear_text>')
Where <some_condition>
ENCRYPTBYPASSPHRASE返回一個VARBINARY值。因此,一個VARBINARY值被設置成一個varchar FIEL d。當我查看數據庫時,它看起來好像字段是空白的,但是如果我運行。
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>)
如果你是演員談論這NVARCHAR我不知道是什麼第三部分工具正在做,但如果我鑄造VARCHAR我得到一些奇怪的漢字sytle字符,如果我強制轉換爲NVARCHAR我得到原始值回來。我認爲這與解密功能有關,而不是存儲在該字段中的內容。但我實際上不得不轉換爲VARBINARY而不是VARCHAR –
有趣的是,當我這樣做時,情況正好相反:nvarchar放出一些中國/亞洲象形文字,而varchar做我的英文文本。 –