2013-08-21 62 views
3

前值有一個在我的表中的一個字段使用的LINQ to SQL解密填充物

ENCRYPTBYPASSPHRASE(<passphrase>,<value>) 

當值放入領域仍然是加密,所以我不能做對象加密任何事情。我無法創建視圖或存儲過程或解密數據庫字段的任何其他項目,因爲這樣就會破壞加密字段的目的。有沒有辦法使框架的工作運行如

DECRYPTBYPASSPHRASE(<passphrase>, <columnName>) 

之前將值分配給對象?

現在我正在獲取數據,然後調用ExecuteQuery來解密值。並在我的數據模型類的加密值上分配新值。它有效,但我只是想知道是否可以通過一些我不知道的選項自動完成。我試過搜索,但沒有找到任何東西。

+0

您將如何自動知道'passPhrase'和類型來轉換清除'varbinary',或者您是否想要檢索'byte []'? – Jodrell

+0

我知道PassPhrase現在我得到解密的值調用ExecuteQuery像下面的東西。 –

+0

我知道PassPhrase現在我得到解密的值調用ExecuteQuery與下面的東西。 「Select CAST(DECRYPTBYPASSPHRASE('{0}',{1})AS NVARCHAR(MAX))AS {2} FROM Table Whered PrimaryKey = {3}」 其中0 = phassphrase,1 =列,2 =返回列的名稱,3 =我想解密的確切記錄的關鍵字。所以我現在正在獲取價值,只是需要我額外的一步,在數據從數據庫填充到對象之後,我必須運行一個額外的查詢來獲取解密值。 –

回答

0

這表現在this fiddle,下面的SQL是完全有效的,

SELECT 
      E.[Key], 
      CAST(
         DecryptByPassPhrase(
          'test', 
          E.[Encrypted]) 
       AS 
        varchar(8000)) [Clear], 
      E.[Other] 
    FROM 
      [Example] E; 

因此,使用this overload of ExecuteQuery做這樣的事情,

var examples = context.ExecuteQuery<Example>(
    @"SELECT 
       E.[Key], 
       CAST(
          DecryptByPassPhrase(
           @p0, 
           E.[Encrypted]) 
        AS 
         varchar(8000)) [Clear], 
       E.[Other] 
     FROM 
       [Example] E;", 
    passPhrase); 

檢索並在一個呼叫解密數據。

+0

是的,我剛剛得出結論,我將不得不運行ExecuteQuery並自己提供查詢。 –

1

我假設你正在使用LINQ到SQL和您是從拉動表的結構,像這樣:

+--------+---------------+ 
| UserId | Passphrase | 
+--------+---------------+ 
|  1 | laskdfmlsadkf | 
+--------+---------------+ 

有了這些信息,你可以在你的選擇應用,解密方法。

var password = "password"; 
var userId = 1; 

var result = usertable.Where(c => c.UserId == userId).ToList() 
.Select(t => new 
{ 
    Passphrase = DECRYPTBYPASSPHRASE(t.Passphrase) 
}).First() 

bool areSame = (password == result.Passphrase); 
+0

我還沒有有機會回去嘗試一下,我希望能在這裏儘快獲得一些時間 –

+0

'DECRYPTBYPASSPHRASE'是TSQL函數,而不是.Net。 – Jodrell

+0

@Jodrell您需要將'DECRYPTBYPASSPHRASE'存儲過程[in你的linq2sql模型](http://msdn.microsoft.com/en-us/library/vstudio/bb399357%28v=vs.100%29.aspx),所以它可以從.NET代碼中使用。 –