实体框架:如何在OrderBy之前解密字段

时间:2012-10-26 03:05:48

标签: linq entity-framework linq-to-entities entity

我有一个IQueryable客户实体列表(EntityFrameworks)。我需要在此IQueryable列表上执行orderby,但问题是我要用于排序的字段是在数据库中加密的。在订购之前有什么办法可以解密这个字段吗?我可以为OrderBy编写某种Linq扩展名吗?由于可能有成千上万的客户,我不想实现列表只是为了对它进行排序......

2 个答案:

答案 0 :(得分:0)

现在似乎不可能。

只有在解密发生在数据库中且解密算法无法转换为SQL语句的情况下才有可能,因此无法进行解密。

答案 1 :(得分:0)

因为您有一个加密字段,所以没有可能通过解密值对任何列表进行排序而无需每行首先解密。这当然是因为要订购你必须首先知道字段的值,所以除非你的加密中有一些模式会导致一些排序(在这种情况下它是一个糟糕的加密算法!)然后你运气不好。

我不建议在SQL中放置任何解密技术,因为如果数据库被泄露,就无法保护某些人获得对加密值的访问权限。例如,某人掌握了数据库的备份,其中包含客户的所有加密值,以及解密它们的方法!

一种可能的hacky解决方案是在另一列中存储某种排序索引,该索引是根据加密值计算的。比如说你的数据是字母的,你可以将未加密的值的第一个字母存储在另一列中,这至少可以让你最小化你需要带来的行数。