我刚刚发现了关于堆叠的溢出和我刚刚检查,如果有想法的约束,我有一些朋友在一个项目,但这更是一个理论问题,我一直在试图找到一个答案对一些时间。

我不是给予进入密码,但是如果我不够清楚我会试图编辑/评论以澄清的任何问题。

试图以简要、环境是这样的:

  • 一个应用程序,前端,作为访问加密/解密钥匙和后端仅用于存储和查询。

  • 有一个数据库来这你不能访问的一对夫妇的领域例如我们所说的"地址",这是文/varchar像往常一样。

  • 你不能访问到的关键用于解密的信息,并且所有信息达到的数据库已经加密的。

主要的问题是像这样的东西,如何一贯地使查询的数据库,这是不可能做到的东西喜欢"那里的地址like'%F§YU/~#JKSks23%'".(如果有任何人感觉有一个答案随意开枪的话)。

但是,它确定来做 where address='±!NNsj3~^º-:'?或将它还完全吃掉的数据库?

另一个限制,可能适用于前端没有处理能力,所以已经加密/解的信息开始把它推到极限。(这样说只是为了避免的答复,如"出口加入的桌子前端和查询它在那里"。)

可能有人点我在一个方向,以保持思考吗?


好吧谢谢你这么快回复在凌晨4点,对于第一使用时间我真的感觉印象深刻,这个社区。(或者,也许我只是对不同时区)

只是喂食的一些信息:

主要的问题是周围的所有部分匹配。作为一项强制性要求在最大数据库是允许部分相匹配。主要的制约是实际上 该数据库的所有者将不被允许看看里面的数据库的信息.在过去10分钟我已经想出了一个可能的解决方案,再次延伸到可能的数据库的问题,这我将在这里补充:

可能的解决方案,以允许半部分匹配:

  • 密码+几个公共领域用户实际上是密钥进行加密的.对于认证的想法是加密的一个静态的价值,并在数据库内。
  • 创建一套新的表格,其中的信息存储在一个分析的方式,意思是这样的:"第4街"将成为2加密行(一个用于'4'另一个"街道").这将已经允许半部分匹配作为一个搜索可能已经进行单独表。

新的问题:

  • 这可能是吃了数据库服务器,或者没有任何人认为它是一个可行的解决方案的部分匹配的问题?

后记:我已经不被接受的答案,从凯德鲁只是为了允许为进一步讨论和专门的一个可能的答案的新的问题。

有帮助吗?

解决方案

你可以做你的方式描述有效地查询的散列,说,但还有不多的系统与这一要求,因为在这一点的安全要求干涉其他要求的系统的可用性-即没有部分匹配的,因为加密的规则。这是同一问题的压缩。几年前,在一个非常小的环境中,我已经压缩的数据之前把它放在数据格式。当然,这些领域不大容易被搜索。

在更典型的应用,最终,关键是要提供对某人的链可能的网络服务器。

为终端用户的交通SSL保护的管道。一些网络交换机能保护之间的网络服务器和数据库,并储存的加密数据库中的数据是好的,但你不会查询的数据加密这样的。

一旦该数据显示,它在那里的机器,因此任何一般目的计算设备可以避免在这一点上,你有外围防御外部的应用程序,它真的会发挥作用。

其他提示

为什么不加密磁盘持的数据库表、加密的数据库连接,让数据库运行正常?

[我真的不了解情况/约束,需要这一水平偏执狂]

编辑:"法律的约束"?我希望你们不参与任何非法的,我讨厌一个无意中的附件...;-)

如果-啊哈-法律约束力这一解决方案,然后,就是所有工作要做-不喜欢匹配,并响应缓慢,如果客户机不能处理它。

几个月前,我遇到了同样的问题:整个数据库(除了索引)是加密的问题,部分匹配起来。

我搜索因特网寻找一个解决方案,但似乎没有太多要做的关于这一点,但一个"解决方法"。

解决我最后通过的是:

  1. 创建一个临时的表与数据的领域,对其查询正在执行解密并的另一个领域,是主要的关键的表(显然,这一领域没有可以解密的作是纯文本)。

  2. 执行部分匹配的筹委会临时表格和检索的标识符。

  3. 查询的真正表,对于那些标识符和返回的结果。

  4. 下降的临时表格。

我知道,这种假设一个非微不足道的开销,但是我还没有找到另一种方式来执行这项任务时,它是强制性的,该数据库是完全加密的。

根据每个特定情况下,你可能能够过滤器的数量线,插入临时表,而不会丢失数据的结果(仅考虑那些行属于用户进行查询,等等...)。

你想做使用md5哈希。基本上,它需要你的串并把它变成一散列的不能再现。然后你可以用它来验证的事以后。例如:

$salt = "123-=asd";
$address = "3412 g ave";

$sql = "INSERT INTO addresses (address) VALUES ('" . md5($salt . $address) . "')";
mysql_query($sql);

然后,验证了一个地址在未来:

$salt = "123-=asd";
$address = "3412 g ave";

$sql = "SELECT address FROM addresses WHERE address = '" . md5($salt . $address) . "'";
$res = mysql_query($sql);
if (mysql_fetch_row($res))
    // exists
else
    // does not

现在是加密的数据库侧,这样就没有人可以找到它了-即使他们在看着你的源码。然而,找到盐将帮助他们解密。

http://en.wikipedia.org/wiki/MD5

如果你需要存储敏感数据查询后,我建议将其存储在纯文本,限制访问这些表格你可以尽可能多的.

如果你不能这样做,而且你不想开销前结束你可以做一个组成部分在后端,运行中的服务器,该进程的加密数据。

使querys到加密的数据?如果你使用良好的加密算法我不能想象如何做到这一点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top