我的一个表中有一个字段使用
加密ENCRYPTBYPASSPHRASE(<passphrase>,<value>)
当值放入对象时,字段仍然是加密的,因此我无法对其进行任何操作。我无法创建视图或存储过程或任何其他解密数据库字段的项目,因为它失去了加密字段的目的。有没有办法使框架工作运行像
DECRYPTBYPASSPHRASE(<passphrase>, <columnName>)
在将值赋给对象之前?
现在我正在获取数据,然后调用ExecuteQuery来解密该值。并在我的数据模型类的加密值上分配该新值。它的工作原理,但我只是想知道它是否可以通过我不知道的一些选项自动完成。我试过搜索但没找到任何东西。
答案 0 :(得分:1)
我假设您正在使用linq-to-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);
答案 1 :(得分: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);
在一次通话中检索和解密您的数据。