我有一个 IQueryable 客户实体列表(EntityFrameworks)。我需要在这个 IQueryable 列表上进行排序,但问题是我要用于排序的字段在数据库中是加密的。有什么方法可以在订购之前解密此字段?我可以为 OrderBy 编写某种 Linq 扩展吗?由于可能有成千上万的客户,我不想将列表具体化,以便对其进行排序......
问问题
189 次
2 回答
0
因为您有一个加密字段,所以如果不首先解密每一行,就不可能按解密值对任何列表进行排序。这当然是因为要订购您必须首先知道字段的值,所以除非您的加密中有某种模式会导致某种订购(在这种情况下它是一个糟糕的加密算法!)那么您就不走运了.
我不建议在 SQL 中使用任何解密技术,因为如果数据库遭到破坏,将无法防止有人访问加密值。例如,有人掌握了您的数据库的备份,其中包含所有客户的加密值,以及解密它们的方法!
一个可能的 hacky 解决方案是将某种排序索引存储在另一列中,该索引是根据加密值计算的。例如,假设您的数据是按字母顺序排列的,您可以将未加密值的第一个字母存储在另一列中,这至少可以让您最大限度地减少需要通过该行传输的行数。
于 2012-10-26T07:08:55.950 回答
0
现在似乎不可能。
只有在解密发生在数据库中并且解密算法无法转换为 SQL 语句的情况下才有可能,因此这是不可能的。
于 2012-10-26T04:50:41.893 回答