2013-08-20 72 views
2

我「米使用的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>) 

回答

1
  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); 
    
+0

如果你是演員談論這NVARCHAR我不知道是什麼第三部分工具正在做,但如果我鑄造VARCHAR我得到一些奇怪的漢字sytle字符,如果我強制轉換爲NVARCHAR我得到原始值回來。我認爲這與解密功能有關,而不是存儲在該字段中的內容。但我實際上不得不轉換爲VARBINARY而不是VARCHAR –

+0

有趣的是,當我這樣做時,情況正好相反:nvarchar放出一些中國/亞洲象形文字,而varchar做我的英文文本。 –