2013-08-21 63 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代码中使用。 –